Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1879)

Unified Diff: content/renderer/media/audio_input_device.cc

Issue 8659040: There is a racing between SyncSocket::Receive in audio_thread_ and SyncSocket::Close in renderer ... (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/audio_input_device.cc
===================================================================
--- content/renderer/media/audio_input_device.cc (revision 111890)
+++ content/renderer/media/audio_input_device.cc (working copy)
@@ -25,7 +25,8 @@
volume_(1.0),
stream_id_(0),
session_id_(0),
- pending_device_ready_(false) {
+ pending_device_ready_(false),
+ audio_event_(true, false) {
filter_ = RenderThreadImpl::current()->audio_input_message_filter();
audio_data_.reserve(channels);
#if defined(OS_MACOSX)
@@ -90,8 +91,8 @@
// function call.
if (completion.TimedWait(kMaxTimeOut)) {
if (audio_thread_.get()) {
- // Terminate the main thread function in the audio thread.
- socket_->Close();
+ // Signal the |audio_event_| to terminate the main thread function.
+ audio_event_.Signal();
// Wait for the audio thread to exit.
audio_thread_->Join();
// Ensures that we can call Stop() multiple times.
@@ -199,6 +200,7 @@
socket_.reset(new base::SyncSocket(socket_handle));
+ audio_event_.Reset();
audio_thread_.reset(
new base::DelegateSimpleThread(this, "RendererAudioInputThread"));
audio_thread_->Start();
@@ -287,7 +289,8 @@
const int bytes_per_ms = audio_parameters_.channels *
(audio_parameters_.bits_per_sample / 8) * samples_per_ms;
- while (sizeof(pending_data) == socket_->Receive(&pending_data,
+ while (!audio_event_.IsSignaled() &&
Ami GONE FROM CHROMIUM 2011/11/29 17:48:32 I'm not super-familiar with the audio codebase, bu
tommi (sloooow) - chröme 2011/11/29 20:11:32 Hey Ami, A couple of questions inline: On 2011/1
Ami GONE FROM CHROMIUM 2011/11/29 20:38:16 The problem is with the other case; IsSignaled() m
no longer working on chromium 2011/11/30 17:02:55 Event is thread safe. In the case you mentioned ab
+ sizeof(pending_data) == socket_->Receive(&pending_data,
sizeof(pending_data)) &&
pending_data >= 0) {
// TODO(henrika): investigate the provided |pending_data| value
@@ -299,6 +302,9 @@
FireCaptureCallback();
}
+
+ // Close the socket.
+ socket_->Close();
}
void AudioInputDevice::FireCaptureCallback() {
« content/renderer/media/audio_device.cc ('K') | « content/renderer/media/audio_input_device.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698