New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 647178 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Oct 2016
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: Bug



Sign in to add a comment

TSan reports a data race between content::MediaStreamAudioProcessor::ProcessData() and shutdown

Project Member Reported by glider@chromium.org, Sep 15 2016

Issue description

Report from https://build.chromium.org/p/chromium.memory.full/builders/Linux%20TSan%20Tests/builds/1646/steps/content_browsertests%20on%20Ubuntu-12.04/logs/stdio (previously reported in  issue 638578 ):

[ RUN      ] WebRtcGetUserMediaBrowserTest.GetAudioAndVideoStreamAndClone
[7837:7837:0915/022322:13288977894:WARNING:audio_manager.cc(317)] Multiple instances of AudioManager detected
[7837:7837:0915/022322:13288978096:WARNING:audio_manager.cc(278)] Multiple instances of AudioManager detected
Xlib:  extension "RANDR" missing on display ":9".
[7837:7837:0915/022323:13290032873:INFO:CONSOLE(169)] "Calling getUserMediaAndClone.", source: http://127.0.0.1:46906/media/getusermedia.html (169)
[7837:7837:0915/022323:13290088280:INFO:CONSOLE(75)] "Looking at video in element local-view-1", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (75)
[7837:7837:0915/022327:13293794779:INFO:CONSOLE(108)] "Still waiting for video to satisfy function isVideoPlaying(pixels, previousPixels) {
  for (var i = 0; i < pixels.length; i++) {
    if (pixels[i] != previousPixels[i]) {
      return true;
    }
  }
  return false;
}", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (108)
[7837:7837:0915/022327:13293795477:INFO:CONSOLE(109)] "DEBUG: video.width = 0", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (109)
[7837:7837:0915/022327:13293796283:INFO:CONSOLE(110)] "DEBUG: video.height = 0", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (110)
[7837:7837:0915/022327:13293914978:INFO:CONSOLE(98)] "Done looking at video in element local-view-1", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (98)
[7837:7837:0915/022327:13293915807:INFO:CONSOLE(99)] "DEBUG: video.width = 640", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (99)
[7837:7837:0915/022327:13293916086:INFO:CONSOLE(100)] "DEBUG: video.height = 480", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (100)
[7837:7837:0915/022327:13293917151:INFO:CONSOLE(29)] "Test Success", source: http://127.0.0.1:46906/media/webrtc_test_utilities.js (29)
==================
WARNING: ThreadSanitizer: data race (pid=7871)
  Read of size 8 at 0x7d48000002d0 by thread T10:
    #0 operator-> base/memory/ref_counted.h:323:12 (content_browsertests+0x000003f3032c)
    #1 content::MediaStreamAudioProcessor::ProcessData(float const* const*, int, base::TimeDelta, int, bool, float* const*) content/renderer/media/media_stream_audio_processor.cc:812 (content_browsertests+0x000003f3032c)
    #2 content::MediaStreamAudioProcessor::ProcessAndConsumeData(int, bool, media::AudioBus**, base::TimeDelta*, int*) content/renderer/media/media_stream_audio_processor.cc:375:19 (content_browsertests+0x000003f2fc83)
    #3 content::ProcessedLocalAudioSource::Capture(media::AudioBus const*, int, double, bool) content/renderer/media/webrtc/processed_local_audio_source.cc:321:28 (content_browsertests+0x000003e411ef)
    #4 non-virtual thunk to content::ProcessedLocalAudioSource::Capture(media::AudioBus const*, int, double, bool) content/renderer/media/webrtc/processed_local_audio_source.cc:266:33 (content_browsertests+0x000003e412a6)
    #5 media::AudioInputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_input_device.cc:345:22 (content_browsertests+0x000000c49687)
    #6 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c4477a)
    #7 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002a952cd)

  Previous write of size 8 at 0x7d48000002d0 by main thread:
    #0 swap base/memory/ref_counted.h:360:9 (content_browsertests+0x000002a47671)
    #1 swap base/memory/ref_counted.h:364 (content_browsertests+0x000002a47671)
    #2 operator= base/memory/ref_counted.h:347 (content_browsertests+0x000002a47671)
    #3 base::MessageLoop::SetTaskRunner(scoped_refptr<base::SingleThreadTaskRunner>) base/message_loop/message_loop.cc:436 (content_browsertests+0x000002a47671)
    #4 blink::scheduler::SchedulerTqmDelegateImpl::RestoreDefaultTaskRunner() third_party/WebKit/Source/platform/scheduler/child/scheduler_tqm_delegate_impl.cc:38:20 (content_browsertests+0x0000041235e6)
    #5 blink::scheduler::SchedulerHelper::Shutdown() third_party/WebKit/Source/platform/scheduler/child/scheduler_helper.cc:53:33 (content_browsertests+0x000004122e68)
    #6 blink::scheduler::RendererSchedulerImpl::Shutdown() third_party/WebKit/Source/platform/scheduler/renderer/renderer_scheduler_impl.cc:203:11 (content_browsertests+0x00000408300f)
    #7 content::RenderThreadImpl::Shutdown() content/renderer/render_thread_impl.cc:962:24 (content_browsertests+0x000003d89f65)
    #8 non-virtual thunk to content::RenderThreadImpl::Shutdown() content/renderer/render_thread_impl.cc:859:24 (content_browsertests+0x000003d8a0cd)
    #9 content::ChildProcess::~ChildProcess() content/child/child_process.cc:73:19 (content_browsertests+0x000003c918c7)
    #10 content::RenderProcessImpl::~RenderProcessImpl() content/renderer/render_process_impl.cc:113:1 (content_browsertests+0x000003d837bf)
    #11 content::RendererMain(content::MainFunctionParams const&) content/renderer/renderer_main.cc:207:3 (content_browsertests+0x000003dcc4eb)
    #12 content::RunZygote(content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:343:14 (content_browsertests+0x000001f05b4d)
    #13 content::RunNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:426:12 (content_browsertests+0x000001f066d7)
    #14 content::ContentMainRunnerImpl::Run() content/app/content_main_runner.cc:786:12 (content_browsertests+0x000001f073ad)
    #15 content::ContentMain(content::ContentMainParams const&) content/app/content_main.cc:20:28 (content_browsertests+0x000001efe2ce)
    #16 content::LaunchTests(content::TestLauncherDelegate*, int, int, char**) content/public/test/test_launcher.cc:523:12 (content_browsertests+0x000002632c8a)
    #17 main content/test/content_test_launcher.cc:131:10 (content_browsertests+0x000002618802)

  Thread T10 'AudioInputDevic' (tid=7884, running) created by thread T1 at:
    #0 pthread_create <null> (content_browsertests+0x0000004b1c45)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (content_browsertests+0x000002a94f97)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191:10 (content_browsertests+0x000002a94e95)
    #3 media::AudioDeviceThread::AudioDeviceThread(media::AudioDeviceThread::Callback*, int, char const*) media/audio/audio_device_thread.cc:51:3 (content_browsertests+0x000000c444d6)
    #4 media::AudioInputDevice::OnStreamCreated(base::FileDescriptor, int, int, int) media/audio/audio_input_device.cc:151:27 (content_browsertests+0x000000c486c2)
    #5 non-virtual thunk to media::AudioInputDevice::OnStreamCreated(base::FileDescriptor, int, int, int) media/audio/audio_input_device.cc:123:24 (content_browsertests+0x000000c4879d)
    #6 content::AudioInputMessageFilter::OnStreamCreated(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int) content/renderer/media/audio_input_message_filter.cc:145:13 (content_browsertests+0x000003efccb7)
    #7 DispatchToMethodImpl<content::AudioInputMessageFilter *, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int), const std::__1::tuple<int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int> &, 0, 1, 2, 3, 4> base/tuple.h:144:3 (content_browsertests+0x000003efca1a)
    #8 DispatchToMethod<content::AudioInputMessageFilter *, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int), const std::__1::tuple<int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int> &> base/tuple.h:151 (content_browsertests+0x000003efca1a)
    #9 DispatchToMethod<content::AudioInputMessageFilter, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int), void, std::__1::tuple<int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int> > ipc/ipc_message_templates.h:26 (content_browsertests+0x000003efca1a)
    #10 bool IPC::MessageT<AudioInputMsg_NotifyStreamCreated_Meta, std::__1::tuple<int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int>, void>::Dispatch<content::AudioInputMessageFilter, content::AudioInputMessageFilter, void, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int)>(IPC::Message const*, content::AudioInputMessageFilter*, content::AudioInputMessageFilter*, void*, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int)) ipc/ipc_message_templates.h:121 (content_browsertests+0x000003efca1a)
    #11 content::AudioInputMessageFilter::OnMessageReceived(IPC::Message const&) content/renderer/media/audio_input_message_filter.cc:85:5 (content_browsertests+0x000003efc867)
    #12 TryFiltersImpl ipc/message_filter_router.cc:22:21 (content_browsertests+0x000002cf3920)
    #13 IPC::MessageFilterRouter::TryFilters(IPC::Message const&) ipc/message_filter_router.cc:80 (content_browsertests+0x000002cf3920)
    #14 IPC::ChannelProxy::Context::TryFilters(IPC::Message const&) ipc/ipc_channel_proxy.cc:103:31 (content_browsertests+0x000002cd951a)
    #15 IPC::SyncChannel::SyncContext::OnMessageReceived(IPC::Message const&) ipc/ipc_sync_channel.cc:428:7 (content_browsertests+0x000002cec534)
    #16 IPC::ChannelMojo::OnMessageReceived(IPC::Message const&) ipc/ipc_channel_mojo.cc:410:14 (content_browsertests+0x000002cd1069)
    #17 non-virtual thunk to IPC::ChannelMojo::OnMessageReceived(IPC::Message const&) ipc/ipc_channel_mojo.cc:402:19 (content_browsertests+0x000002cd1254)
    #18 IPC::internal::MessagePipeReader::Receive(std::__1::vector<unsigned char, std::__1::allocator<unsigned char> > const&, base::Optional<std::__1::vector<mojo::StructPtr<IPC::mojom::SerializedHandle>, std::__1::allocator<mojo::StructPtr<IPC::mojom::SerializedHandle> > > >) ipc/ipc_message_pipe_reader.cc:113:14 (content_browsertests+0x000002ce1db7)
    #19 IPC::mojom::ChannelStub::Accept(mojo::Message*) out/Release/gen/ipc/ipc.mojom.cc:242:14 (content_browsertests+0x000000b2b59e)
    #20 mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:334:32 (content_browsertests+0x000002723ba6)
    #21 mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:128:18 (content_browsertests+0x00000272391a)
    #22 mojo::FilterChain::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/filter_chain.cc:40:17 (content_browsertests+0x00000272339d)
    #23 mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:268:19 (content_browsertests+0x000002724964)
    #24 IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) ipc/ipc_mojo_bootstrap.cc:644:20 (content_browsertests+0x000002ce507a)
    #25 non-virtual thunk to IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) ipc/ipc_mojo_bootstrap.cc:595:8 (content_browsertests+0x000002ce5694)
    #26 mojo::FilterChain::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/filter_chain.cc:40:17 (content_browsertests+0x00000272339d)
    #27 mojo::Connector::ReadSingleMessage(unsigned int*) mojo/public/cpp/bindings/lib/connector.cc:276:51 (content_browsertests+0x000002721bd5)
    #28 ReadAllAvailableMessages mojo/public/cpp/bindings/lib/connector.cc:302:10 (content_browsertests+0x00000272208a)
    #29 OnHandleReadyInternal mojo/public/cpp/bindings/lib/connector.cc:234 (content_browsertests+0x00000272208a)
    #30 mojo::Connector::OnWatcherHandleReady(unsigned int) mojo/public/cpp/bindings/lib/connector.cc:214 (content_browsertests+0x00000272208a)
    #31 Invoke<mojo::Connector *, unsigned int> base/bind_internal.h:214:12 (content_browsertests+0x000002722254)
    #32 MakeItSo<void (mojo::Connector::*const &)(unsigned int), mojo::Connector *, unsigned int> base/bind_internal.h:285 (content_browsertests+0x000002722254)
    #33 RunImpl<void (mojo::Connector::*const &)(unsigned int), const std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > &, 0> base/bind_internal.h:361 (content_browsertests+0x000002722254)
    #34 base::internal::Invoker<base::internal::BindState<void (mojo::Connector::*)(unsigned int), base::internal::UnretainedWrapper<mojo::Connector> >, void (unsigned int)>::Run(base::internal::BindStateBase*, unsigned int&&) base/bind_internal.h:339 (content_browsertests+0x000002722254)
    #35 Run base/callback.h:64:12 (content_browsertests+0x000000b27cf9)
    #36 OnHandleReady mojo/public/cpp/system/watcher.cc:122 (content_browsertests+0x000000b27cf9)
    #37 mojo::Watcher::CallOnHandleReady(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int) mojo/public/cpp/system/watcher.cc:142 (content_browsertests+0x000000b27cf9)
    #38 mojo::edk::(anonymous namespace)::CallWatchCallback(void (*)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), unsigned long, unsigned int, mojo::edk::HandleSignalsState const&, unsigned int) mojo/edk/system/core.cc:57:3 (content_browsertests+0x0000026e918c)
    #39 Invoke<void (*const &)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), const unsigned long &, unsigned int, const mojo::edk::HandleSignalsState &, unsigned int> base/bind_internal.h:164:12 (content_browsertests+0x0000026ed87d)
    #40 MakeItSo<void (*const &)(void (*)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), unsigned long, unsigned int, const mojo::edk::HandleSignalsState &, unsigned int), void (*const &)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), const unsigned long &, unsigned int, const mojo::edk::HandleSignalsState &, unsigned int> base/bind_internal.h:285 (content_browsertests+0x0000026ed87d)
    #41 RunImpl<void (*const &)(void (*)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), unsigned long, unsigned int, const mojo::edk::HandleSignalsState &, unsigned int), const std::__1::tuple<void (*)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), unsigned long> &, 0, 1> base/bind_internal.h:361 (content_browsertests+0x0000026ed87d)
    #42 base::internal::Invoker<base::internal::BindState<void (*)(void (*)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), unsigned long, unsigned int, mojo::edk::HandleSignalsState const&, unsigned int), void (*)(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int), unsigned long>, void (unsigned int, mojo::edk::HandleSignalsState const&, unsigned int)>::Run(base::internal::BindStateBase*, unsigned int&&, mojo::edk::HandleSignalsState const&, unsigned int&&) base/bind_internal.h:339 (content_browsertests+0x0000026ed87d)
    #43 Run base/callback.h:64:12 (content_browsertests+0x000002712db9)
    #44 mojo::edk::Watcher::MaybeInvokeCallback(unsigned int, mojo::edk::HandleSignalsState const&, unsigned int) mojo/edk/system/watcher.cc:24 (content_browsertests+0x000002712db9)
    #45 mojo::edk::RequestContext::~RequestContext() mojo/edk/system/request_context.cc:59:22 (content_browsertests+0x00000270a1e8)
    #46 mojo::edk::NodeChannel::OnChannelMessage(void const*, unsigned long, std::__1::unique_ptr<std::__1::vector<mojo::edk::PlatformHandle, std::__1::allocator<mojo::edk::PlatformHandle> >, mojo::edk::PlatformHandleVectorDeleter>) mojo/edk/system/node_channel.cc:766:1 (content_browsertests+0x00000271de40)
    #47 mojo::edk::Channel::OnReadComplete(unsigned long, unsigned long*) mojo/edk/system/channel.cc:563:18 (content_browsertests+0x0000027169db)
    #48 mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) mojo/edk/system/channel_posix.cc:314:14 (content_browsertests+0x000002718ece)
    #49 non-virtual thunk to mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) mojo/edk/system/channel_posix.cc:274:8 (content_browsertests+0x000002719134)
    #50 OnFileCanReadWithoutBlocking base/message_loop/message_pump_libevent.cc:95:13 (content_browsertests+0x000002a4d03a)
    #51 base::MessagePumpLibevent::OnLibeventNotification(int, short, void*) base/message_loop/message_pump_libevent.cc:344 (content_browsertests+0x000002a4d03a)
    #52 event_process_active base/third_party/libevent/event.c:381:4 (content_browsertests+0x000002aefbd1)
    #53 event_base_loop base/third_party/libevent/event.c:521 (content_browsertests+0x000002aefbd1)
    #54 base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_libevent.cc:244:7 (content_browsertests+0x000002a4d402)
    #55 base::MessageLoop::RunHandler() base/message_loop/message_loop.cc:451:10 (content_browsertests+0x000002a476eb)
    #56 base::RunLoop::Run() base/run_loop.cc:35:10 (content_browsertests+0x000002a70767)
    #57 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:229:13 (content_browsertests+0x000002a9baa9)
    #58 base::Thread::ThreadMain() base/threading/thread.cc:307:3 (content_browsertests+0x000002a9bcd5)
    #59 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002a952cd)

SUMMARY: ThreadSanitizer: data race base/memory/ref_counted.h:323:12 in operator->
==================
Received signal 11 SEGV_MAPERR 000000000000
#0 0x0000004ca806 [7871:7873:0915/022327:13294328215:ERROR:audio_input_device.cc(271)] IO loop going away before the input device has been stopped
__interceptor_backtrace
 

Comment 1 by mcasas@chromium.org, Sep 16 2016

Components: Blink>MediaStream
Cc: infe...@chromium.org
A friendly ping.

Comment 3 by glider@chromium.org, Oct 17 2016

Ping.

Comment 4 by m...@chromium.org, Oct 19 2016

Status: Started (was: Assigned)
I think this is being caused by MSAudioProcessor storing a raw pointer to the MessageLoop and assuming that will always be valid (and thread-safe to access). It's not.

Instead, it should store a refptr to a TaskRunner, which is the normal mechanism for mitigating these kinds of "post task during shutdown" issues.
Project Member

Comment 5 by bugdroid1@chromium.org, Oct 19 2016

The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/a4717b9caba5b1fb1e4455af8932a3a870a9aecf

commit a4717b9caba5b1fb1e4455af8932a3a870a9aecf
Author: miu <miu@chromium.org>
Date: Wed Oct 19 23:04:11 2016

Data race fix: Replace use of MessageLoop raw pointer in MSAudioProcessor.

This change replaces the use of a raw pointer to the main thread's
MessageLoop, by content::MediaStreamAudioProcessor, with a
scoped_refptr to the main thread's task runner. This fixes a
TSan-reported shutdown data race which was caused by the MessageLoop
releasing its task runner at the same time the audio thread was using
the MessageLoop::task_runner() accessor method.

BUG= 647178 

Review-Url: https://chromiumcodereview.appspot.com/2425353002
Cr-Commit-Position: refs/heads/master@{#426318}

[modify] https://crrev.com/a4717b9caba5b1fb1e4455af8932a3a870a9aecf/content/renderer/media/media_stream_audio_processor.cc
[modify] https://crrev.com/a4717b9caba5b1fb1e4455af8932a3a870a9aecf/content/renderer/media/media_stream_audio_processor.h
[modify] https://crrev.com/a4717b9caba5b1fb1e4455af8932a3a870a9aecf/content/renderer/media/media_stream_audio_processor_unittest.cc
[modify] https://crrev.com/a4717b9caba5b1fb1e4455af8932a3a870a9aecf/content/renderer/media/webrtc/processed_local_audio_source_unittest.cc

Comment 6 by m...@chromium.org, Oct 22 2016

Status: Fixed (was: Started)

Comment 7 by m...@chromium.org, Oct 22 2016

Labels: M-55 Merge-Request-55

Comment 8 by dimu@google.com, Oct 24 2016

Labels: -Merge-Request-55 Merge-Review-55 Hotlist-Merge-Review
[Automated comment] There appears to be on-going work (i.e. bugroid changes), needs manual review.

Comment 9 by gov...@chromium.org, Oct 24 2016

Before we approve merge to M55 branch 2883, could you please confirm whether this change is baked/verified in Canary and safe to merge to M55?

Comment 10 by dimu@google.com, Oct 24 2016

Labels: -Hotlist-Merge-review -Merge-Review-55 Merge-Request-55

Comment 11 by dimu@chromium.org, Oct 24 2016

Labels: -Merge-Request-55 Merge-Approved-55 Hotlist-Merge-Approved
Your change meets the bar and is auto-approved for M55 (branch: 2883)
Project Member

Comment 12 by bugdroid1@chromium.org, Oct 24 2016

Labels: -merge-approved-55 merge-merged-2883
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6f8fc5767534da6ea3682ab3bde09e782909467b

commit 6f8fc5767534da6ea3682ab3bde09e782909467b
Author: Yuri Wiitala <miu@chromium.org>
Date: Mon Oct 24 21:42:42 2016

Data race fix: Replace use of MessageLoop raw pointer in MSAudioProcessor.

This change replaces the use of a raw pointer to the main thread's
MessageLoop, by content::MediaStreamAudioProcessor, with a
scoped_refptr to the main thread's task runner. This fixes a
TSan-reported shutdown data race which was caused by the MessageLoop
releasing its task runner at the same time the audio thread was using
the MessageLoop::task_runner() accessor method.

BUG= 647178 

Review-Url: https://chromiumcodereview.appspot.com/2425353002
Cr-Commit-Position: refs/heads/master@{#426318}
(cherry picked from commit a4717b9caba5b1fb1e4455af8932a3a870a9aecf)

Review URL: https://codereview.chromium.org/2449573003 .

Cr-Commit-Position: refs/branch-heads/2883@{#263}
Cr-Branched-From: 614d31daee2f61b0180df403a8ad43f20b9f6dd7-refs/heads/master@{#423768}

[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/media_stream_audio_processor.cc
[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/media_stream_audio_processor.h
[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/media_stream_audio_processor_unittest.cc
[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/webrtc/processed_local_audio_source_unittest.cc

Project Member

Comment 13 by bugdroid1@chromium.org, Oct 27 2016

Labels: merge-merged-2840
The following revision refers to this bug:
  https://chromium.googlesource.com/chromium/src.git/+/6f8fc5767534da6ea3682ab3bde09e782909467b

commit 6f8fc5767534da6ea3682ab3bde09e782909467b
Author: Yuri Wiitala <miu@chromium.org>
Date: Mon Oct 24 21:42:42 2016

Data race fix: Replace use of MessageLoop raw pointer in MSAudioProcessor.

This change replaces the use of a raw pointer to the main thread's
MessageLoop, by content::MediaStreamAudioProcessor, with a
scoped_refptr to the main thread's task runner. This fixes a
TSan-reported shutdown data race which was caused by the MessageLoop
releasing its task runner at the same time the audio thread was using
the MessageLoop::task_runner() accessor method.

BUG= 647178 

Review-Url: https://chromiumcodereview.appspot.com/2425353002
Cr-Commit-Position: refs/heads/master@{#426318}
(cherry picked from commit a4717b9caba5b1fb1e4455af8932a3a870a9aecf)

Review URL: https://codereview.chromium.org/2449573003 .

Cr-Commit-Position: refs/branch-heads/2883@{#263}
Cr-Branched-From: 614d31daee2f61b0180df403a8ad43f20b9f6dd7-refs/heads/master@{#423768}

[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/media_stream_audio_processor.cc
[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/media_stream_audio_processor.h
[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/media_stream_audio_processor_unittest.cc
[modify] https://crrev.com/6f8fc5767534da6ea3682ab3bde09e782909467b/content/renderer/media/webrtc/processed_local_audio_source_unittest.cc

Comment 14 by dimu@google.com, Nov 4 2016

Labels: -merge-merged-2840
[Automated comment] removing mislabelled merge-merged-2840

Sign in to add a comment