Index: media/audio/linux/alsa_input.cc |
diff --git a/media/audio/linux/alsa_input.cc b/media/audio/linux/alsa_input.cc |
index 101c1985ec494cee3d29ecb75c9d8ad8f26a612a..994c065d4c4fad260468bb1edfe764509bc62a0f 100644 |
--- a/media/audio/linux/alsa_input.cc |
+++ b/media/audio/linux/alsa_input.cc |
@@ -247,25 +247,25 @@ void AlsaPcmInputStream::Stop() { |
} |
void AlsaPcmInputStream::Close() { |
- scoped_ptr<AlsaPcmInputStream> self_deleter(this); |
+ if (device_handle_) { |
+ weak_factory_.InvalidateWeakPtrs(); // Cancel the next scheduled read. |
+ int error = alsa_util::CloseDevice(wrapper_, device_handle_); |
+ if (error < 0) |
+ HandleError("PcmClose", error); |
- // Check in case we were already closed or not initialized yet. |
- if (!device_handle_) |
- return; |
+ if (mixer_handle_) |
+ alsa_util::CloseMixer(wrapper_, mixer_handle_, device_name_); |
- weak_factory_.InvalidateWeakPtrs(); // Cancel the next scheduled read. |
- int error = alsa_util::CloseDevice(wrapper_, device_handle_); |
- if (error < 0) |
- HandleError("PcmClose", error); |
- |
- if (mixer_handle_) |
- alsa_util::CloseMixer(wrapper_, mixer_handle_, device_name_); |
+ audio_packet_.reset(); |
+ device_handle_ = NULL; |
+ mixer_handle_ = NULL; |
+ mixer_element_handle_ = NULL; |
- audio_packet_.reset(); |
- device_handle_ = NULL; |
+ if (callback_) |
+ callback_->OnClose(this); |
+ } |
- if (callback_) |
- callback_->OnClose(this); |
+ audio_manager_->ReleaseInputStream(this); |
} |
double AlsaPcmInputStream::GetMaxVolume() { |