Index: content/renderer/media/audio_input_message_filter.cc |
diff --git a/content/renderer/media/audio_input_message_filter.cc b/content/renderer/media/audio_input_message_filter.cc |
index b523ac6d9ce398f0a99f1dd0fd8c9ee5d1804705..850cd1a0fa57c49bf06deb2a41c32a654df4f773 100644 |
--- a/content/renderer/media/audio_input_message_filter.cc |
+++ b/content/renderer/media/audio_input_message_filter.cc |
@@ -22,6 +22,11 @@ AudioInputMessageFilter::AudioInputMessageFilter() |
AudioInputMessageFilter::~AudioInputMessageFilter() { |
DVLOG(1) << "AudioInputMessageFilter::~AudioInputMessageFilter()"; |
+ |
+ // Just in case the message filter is deleted before the channel |
+ // is closed and there are still living audio devices. |
+ OnChannelClosing(); |
+ |
DCHECK_EQ(filter_, this); |
filter_ = NULL; |
} |
@@ -83,6 +88,7 @@ void AudioInputMessageFilter::OnChannelClosing() { |
IDMap<media::AudioInputIPCDelegate>::iterator it(&delegates_); |
while (!it.IsAtEnd()) { |
it.GetCurrentValue()->OnIPCClosed(); |
+ delegates_.Remove(it.GetCurrentKey()); |
it.Advance(); |
} |
} |