Index: content/renderer/media/audio_message_filter.cc |
diff --git a/content/renderer/media/audio_message_filter.cc b/content/renderer/media/audio_message_filter.cc |
index ef3bd804362a822c84ed4a9980cc0bb4511f258f..dc39f63e4c15ae87dd43ab9c057bbb67960d516c 100644 |
--- a/content/renderer/media/audio_message_filter.cc |
+++ b/content/renderer/media/audio_message_filter.cc |
@@ -105,12 +105,18 @@ void AudioMessageFilter::OnChannelClosing() { |
IDMap<media::AudioOutputIPCDelegate>::iterator it(&delegates_); |
while (!it.IsAtEnd()) { |
it.GetCurrentValue()->OnIPCClosed(); |
+ delegates_.Remove(it.GetCurrentKey()); |
it.Advance(); |
} |
} |
AudioMessageFilter::~AudioMessageFilter() { |
DVLOG(1) << "AudioMessageFilter::~AudioMessageFilter()"; |
+ |
+ // Just in case the message filter is deleted before the channel |
+ // is closed and there are still living audio devices. |
+ OnChannelClosing(); |
+ |
DCHECK(filter_); |
filter_ = NULL; |
} |