Data race between aec_rdft_init() and aec_rdft_forward_128() |
|||||
Issue descriptionAccidentally spotted in a trybot log at https://chromium-swarm.appspot.com/user/task/30b126bf3b5cac10: ================== WARNING: ThreadSanitizer: data race (pid=11046) Read of size 8 at 0x00000a49d9a0 by thread T14 (mutexes: write M885658093642358008): #0 aec_rdft_forward_128(float*) third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:541:3 (content_browsertests+0x000001cd3a52) #1 Fft third_party/webrtc/modules/audio_processing/aec/aec_core.cc:807:3 (content_browsertests+0x000001cce49b) #2 ProcessBlock third_party/webrtc/modules/audio_processing/aec/aec_core.cc:1311 (content_browsertests+0x000001cce49b) #3 webrtc::WebRtcAec_ProcessFrames(webrtc::AecCore*, float const* const*, unsigned long, unsigned long, int, float* const*) third_party/webrtc/modules/audio_processing/aec/aec_core.cc:1856 (content_browsertests+0x000001cce49b) #4 ProcessNormal third_party/webrtc/modules/audio_processing/aec/echo_cancellation.cc:667:5 (content_browsertests+0x000001cd7ab8) #5 webrtc::WebRtcAec_Process(void*, float const* const*, unsigned long, float* const*, unsigned long, short, int) third_party/webrtc/modules/audio_processing/aec/echo_cancellation.cc:351 (content_browsertests+0x000001cd7ab8) #6 webrtc::EchoCancellationImpl::ProcessCaptureAudio(webrtc::AudioBuffer*, int) third_party/webrtc/modules/audio_processing/echo_cancellation_impl.cc:225:13 (content_browsertests+0x000001cfdafc) #7 webrtc::AudioProcessingImpl::ProcessStreamLocked() third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:718:3 (content_browsertests+0x000001cedf9e) #8 webrtc::AudioProcessingImpl::ProcessStream(float const* const*, webrtc::StreamConfig const&, webrtc::StreamConfig const&, float* const*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:567:3 (content_browsertests+0x000001ced1e1) #9 webrtc::AudioProcessingImpl::ProcessStream(float const* const*, unsigned long, int, webrtc::AudioProcessing::ChannelLayout, int, webrtc::AudioProcessing::ChannelLayout, float* const*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:515:10 (content_browsertests+0x000001cecbd8) #10 content::MediaStreamAudioProcessor::ProcessData(float const* const*, int, base::TimeDelta, int, bool, float* const*) content/renderer/media/media_stream_audio_processor.cc:795:13 (content_browsertests+0x000004498717) #11 content::MediaStreamAudioProcessor::ProcessAndConsumeData(int, bool, media::AudioBus**, base::TimeDelta*, int*) content/renderer/media/media_stream_audio_processor.cc:375:19 (content_browsertests+0x000004497c15) #12 content::ProcessedLocalAudioSource::Capture(media::AudioBus const*, int, double, bool) content/renderer/media/webrtc/processed_local_audio_source.cc:321:28 (content_browsertests+0x0000043685e2) #13 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+0x000004368726) #14 media::AudioInputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_input_device.cc:345:22 (content_browsertests+0x000000c44b12) #15 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c3d08e) #16 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168) Previous write of size 8 at 0x00000a49d9a0 by thread T28 (mutexes: write M108224173607772816, write M726342947586658304, write M728313581661386944, write M728595056638097656): #0 aec_rdft_init() third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:573:14 (content_browsertests+0x000001cd3c46) #1 webrtc::SignalClassifier::Initialize(int) third_party/webrtc/modules/audio_processing/level_controller/signal_classifier.cc:115:3 (content_browsertests+0x000001d138a3) #2 webrtc::LevelController::Initialize(int) third_party/webrtc/modules/audio_processing/level_controller/level_controller.cc:166:22 (content_browsertests+0x000001d11317) #3 InitializeLevelController third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:1279:42 (content_browsertests+0x000001ceb7aa) #4 webrtc::AudioProcessingImpl::InitializeLocked() third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:329 (content_browsertests+0x000001ceb7aa) #5 webrtc::AudioProcessingImpl::InitializeLocked(webrtc::ProcessingConfig const&) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:399:10 (content_browsertests+0x000001ceaf88) #6 MaybeInitialize third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:279:10 (content_browsertests+0x000001ceeef4) #7 MaybeInitializeCapture third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:266 (content_browsertests+0x000001ceeef4) #8 webrtc::AudioProcessingImpl::ProcessStream(webrtc::AudioFrame*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:631 (content_browsertests+0x000001ceeef4) #9 LimitMixedAudio third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc:913:33 (content_browsertests+0x000001cc5c8f) #10 webrtc::AudioConferenceMixerImpl::Process() third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc:309 (content_browsertests+0x000001cc5c8f) #11 webrtc::voe::OutputMixer::MixActiveChannels() third_party/webrtc/voice_engine/output_mixer.cc:209:18 (content_browsertests+0x000001ba48d5) #12 GetPlayoutData third_party/webrtc/voice_engine/voe_base_impl.cc:748:28 (content_browsertests+0x000001bad8a7) #13 PullRenderData third_party/webrtc/voice_engine/voe_base_impl.cc:135 (content_browsertests+0x000001bad8a7) #14 non-virtual thunk to webrtc::VoEBaseImpl::PullRenderData(int, int, unsigned long, unsigned long, void*, long*, long*) third_party/webrtc/voice_engine/voe_base_impl.cc:126 (content_browsertests+0x000001bad8a7) #15 content::WebRtcAudioDeviceImpl::RenderData(media::AudioBus*, int, int, base::TimeDelta*) content/renderer/media/webrtc_audio_device_impl.cc:97:30 (content_browsertests+0x00000436ffd0) #16 non-virtual thunk to content::WebRtcAudioDeviceImpl::RenderData(media::AudioBus*, int, int, base::TimeDelta*) content/renderer/media/webrtc_audio_device_impl.cc:62:29 (content_browsertests+0x00000437015d) #17 content::WebRtcAudioRenderer::SourceCallback(int, media::AudioBus*) content/renderer/media/webrtc_audio_renderer.cc:470:12 (content_browsertests+0x00000437789b) #18 content::WebRtcAudioRenderer::Render(media::AudioBus*, unsigned int, unsigned int) content/renderer/media/webrtc_audio_renderer.cc:441:5 (content_browsertests+0x0000043775b3) #19 media::AudioOutputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_output_device.cc:493:21 (content_browsertests+0x000000c519b7) #20 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c3d08e) #21 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168) Location is global 'bitrv2_128' of size 8 at 0x00000a49d9a0 (content_browsertests+0x00000a49d9a0) Mutex M885658093642358008 is already destroyed. Mutex M108224173607772816 is already destroyed. Mutex M726342947586658304 is already destroyed. Mutex M728313581661386944 is already destroyed. Mutex M728595056638097656 is already destroyed. Thread T14 'AudioInputDevic' (tid=11124, running) created by thread T1 at: #0 pthread_create <null> (content_browsertests+0x0000004b06f5) #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+0x000002cbfd05) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191:10 (content_browsertests+0x000002cbfbb5) #3 media::AudioDeviceThread::AudioDeviceThread(media::AudioDeviceThread::Callback*, int, char const*) media/audio/audio_device_thread.cc:51:3 (content_browsertests+0x000000c3ce06) #4 media::AudioInputDevice::OnStreamCreated(base::FileDescriptor, int, int, int) media/audio/audio_input_device.cc:151:27 (content_browsertests+0x000000c439a1) #5 non-virtual thunk to media::AudioInputDevice::OnStreamCreated(base::FileDescriptor, int, int, int) media/audio/audio_input_device.cc:123:24 (content_browsertests+0x000000c43a9d) #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+0x00000444f20b) #7 DispatchToMethodImpl<content::AudioInputMessageFilter *, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int), int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int, 0, 1, 2, 3, 4> base/tuple.h:140:3 (content_browsertests+0x00000444efaa) #8 DispatchToMethod<content::AudioInputMessageFilter *, void (content::AudioInputMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int), int, base::FileDescriptor, base::FileDescriptor, unsigned int, unsigned int> base/tuple.h:147 (content_browsertests+0x00000444efaa) #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+0x00000444efaa) #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+0x00000444efaa) #11 content::AudioInputMessageFilter::OnMessageReceived(IPC::Message const&) content/renderer/media/audio_input_message_filter.cc:85:5 (content_browsertests+0x00000444edd1) #12 TryFiltersImpl ipc/message_filter_router.cc:22:21 (content_browsertests+0x000002f38424) #13 IPC::MessageFilterRouter::TryFilters(IPC::Message const&) ipc/message_filter_router.cc:80 (content_browsertests+0x000002f38424) #14 IPC::ChannelProxy::Context::TryFilters(IPC::Message const&) ipc/ipc_channel_proxy.cc:103:31 (content_browsertests+0x000002f159ad) #15 IPC::SyncChannel::SyncContext::OnMessageReceived(IPC::Message const&) ipc/ipc_sync_channel.cc:428:7 (content_browsertests+0x000002f2ea8a) #16 IPC::ChannelMojo::OnMessageReceived(IPC::Message const&) ipc/ipc_channel_mojo.cc:394:14 (content_browsertests+0x000002f0b76c) #17 non-virtual thunk to IPC::ChannelMojo::OnMessageReceived(IPC::Message const&) ipc/ipc_channel_mojo.cc:386:19 (content_browsertests+0x000002f0ba94) #18 IPC::internal::MessagePipeReader::Receive(mojo::Array<unsigned char>, mojo::Array<mojo::StructPtr<IPC::mojom::SerializedHandle> >) ipc/ipc_message_pipe_reader.cc:152:14 (content_browsertests+0x000002f207fe) #19 IPC::mojom::ChannelStub::Accept(mojo::Message*) out/Release/gen/ipc/ipc.mojom.cc:693:14 (content_browsertests+0x000000b45090) #20 mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:311:32 (content_browsertests+0x0000028a217b) #21 mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:127:18 (content_browsertests+0x0000028a203a) #22 IPC::mojom::ChannelRequestValidator::Accept(mojo::Message*) out/Release/gen/ipc/ipc.mojom.cc:765:19 (content_browsertests+0x000000b455a6) #23 mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:262:30 (content_browsertests+0x0000028a39bc) #24 IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) ipc/ipc_mojo_bootstrap.cc:645:20 (content_browsertests+0x000002f250a2) #25 non-virtual thunk to IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) ipc/ipc_mojo_bootstrap.cc:590:8 (content_browsertests+0x000002f25af4) #26 mojo::MessageHeaderValidator::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/message_header_validator.cc:93:17 (content_browsertests+0x0000028a774d) #27 mojo::Connector::ReadSingleMessage(unsigned int*) mojo/public/cpp/bindings/lib/connector.cc:276:51 (content_browsertests+0x00000289ff5b) #28 ReadAllAvailableMessages mojo/public/cpp/bindings/lib/connector.cc:302:10 (content_browsertests+0x0000028a0627) #29 mojo::Connector::OnHandleReadyInternal(unsigned int) mojo/public/cpp/bindings/lib/connector.cc:234 (content_browsertests+0x0000028a0627) #30 mojo::Connector::OnWatcherHandleReady(unsigned int) mojo/public/cpp/bindings/lib/connector.cc:214:3 (content_browsertests+0x0000028a0530) #31 Invoke<mojo::Connector *, unsigned int> base/bind_internal.h:214:12 (content_browsertests+0x0000028a0894) #32 MakeItSo<void (mojo::Connector::*const &)(unsigned int), mojo::Connector *, unsigned int> base/bind_internal.h:283 (content_browsertests+0x0000028a0894) #33 RunImpl<void (mojo::Connector::*const &)(unsigned int), const std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > &, 0> base/bind_internal.h:346 (content_browsertests+0x0000028a0894) #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:324 (content_browsertests+0x0000028a0894) #35 Run base/callback.h:388:12 (content_browsertests+0x000000b42784) #36 mojo::Watcher::OnHandleReady(unsigned int) mojo/public/cpp/system/watcher.cc:122 (content_browsertests+0x000000b42784) #37 mojo::Watcher::CallOnHandleReady(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int) mojo/public/cpp/system/watcher.cc:142:14 (content_browsertests+0x000000b424f8) #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+0x0000040751fc) #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+0x00000407a09d) #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:283 (content_browsertests+0x00000407a09d) #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:346 (content_browsertests+0x00000407a09d) #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:324 (content_browsertests+0x00000407a09d) #43 Run base/callback.h:388:12 (content_browsertests+0x0000040a5c53) #44 mojo::edk::Watcher::MaybeInvokeCallback(unsigned int, mojo::edk::HandleSignalsState const&, unsigned int) mojo/edk/system/watcher.cc:24 (content_browsertests+0x0000040a5c53) #45 mojo::edk::RequestContext::~RequestContext() mojo/edk/system/request_context.cc:59:22 (content_browsertests+0x00000409d7a8) #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+0x0000040b1d88) #47 mojo::edk::Channel::OnReadComplete(unsigned long, unsigned long*) mojo/edk/system/channel.cc:563:18 (content_browsertests+0x0000040a9bab) #48 mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) mojo/edk/system/channel_posix.cc:288:14 (content_browsertests+0x0000040ac4f1) #49 non-virtual thunk to mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) mojo/edk/system/channel_posix.cc:266:8 (content_browsertests+0x0000040ac7d4) #50 OnFileCanReadWithoutBlocking base/message_loop/message_pump_libevent.cc:95:13 (content_browsertests+0x000002c68b2b) #51 base::MessagePumpLibevent::OnLibeventNotification(int, short, void*) base/message_loop/message_pump_libevent.cc:344 (content_browsertests+0x000002c68b2b) #52 event_process_active base/third_party/libevent/event.c:381:4 (content_browsertests+0x000002d26ec5) #53 event_base_loop base/third_party/libevent/event.c:521 (content_browsertests+0x000002d26ec5) #54 base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_libevent.cc:244:7 (content_browsertests+0x000002c68f6a) #55 base::MessageLoop::RunHandler() base/message_loop/message_loop.cc:451:10 (content_browsertests+0x000002c61ae0) #56 base::RunLoop::Run() base/run_loop.cc:35:10 (content_browsertests+0x000002c95dde) #57 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:228:13 (content_browsertests+0x000002cc73bb) #58 base::Thread::ThreadMain() base/threading/thread.cc:301:3 (content_browsertests+0x000002cc78f0) #59 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168) Thread T28 'AudioOutputDevi' (tid=11226, running) created by thread T1 at: #0 pthread_create <null> (content_browsertests+0x0000004b06f5) #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+0x000002cbfd05) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191:10 (content_browsertests+0x000002cbfbb5) #3 media::AudioDeviceThread::AudioDeviceThread(media::AudioDeviceThread::Callback*, int, char const*) media/audio/audio_device_thread.cc:51:3 (content_browsertests+0x000000c3ce06) #4 media::AudioOutputDevice::OnStreamCreated(base::FileDescriptor, int, int) media/audio/audio_output_device.cc:411:29 (content_browsertests+0x000000c5106d) #5 non-virtual thunk to media::AudioOutputDevice::OnStreamCreated(base::FileDescriptor, int, int) media/audio/audio_output_device.cc:373:25 (content_browsertests+0x000000c51164) #6 content::AudioMessageFilter::OnStreamCreated(int, base::FileDescriptor, base::FileDescriptor, unsigned int) content/renderer/media/audio_message_filter.cc:222:13 (content_browsertests+0x00000445463c) #7 DispatchToMethodImpl<content::AudioMessageFilter *, void (content::AudioMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int), int, base::FileDescriptor, base::FileDescriptor, unsigned int, 0, 1, 2, 3> base/tuple.h:140:3 (content_browsertests+0x0000044543f5) #8 DispatchToMethod<content::AudioMessageFilter *, void (content::AudioMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int), int, base::FileDescriptor, base::FileDescriptor, unsigned int> base/tuple.h:147 (content_browsertests+0x0000044543f5) #9 DispatchToMethod<content::AudioMessageFilter, void (content::AudioMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int), void, std::__1::tuple<int, base::FileDescriptor, base::FileDescriptor, unsigned int> > ipc/ipc_message_templates.h:26 (content_browsertests+0x0000044543f5) #10 bool IPC::MessageT<AudioMsg_NotifyStreamCreated_Meta, std::__1::tuple<int, base::FileDescriptor, base::FileDescriptor, unsigned int>, void>::Dispatch<content::AudioMessageFilter, content::AudioMessageFilter, void, void (content::AudioMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int)>(IPC::Message const*, content::AudioMessageFilter*, content::AudioMessageFilter*, void*, void (content::AudioMessageFilter::*)(int, base::FileDescriptor, base::FileDescriptor, unsigned int)) ipc/ipc_message_templates.h:121 (content_browsertests+0x0000044543f5) #11 content::AudioMessageFilter::OnMessageReceived(IPC::Message const&) content/renderer/media/audio_message_filter.cc:152:5 (content_browsertests+0x000004453fe8) #12 TryFiltersImpl ipc/message_filter_router.cc:22:21 (content_browsertests+0x000002f38424) #13 IPC::MessageFilterRouter::TryFilters(IPC::Message const&) ipc/message_filter_router.cc:80 (content_browsertests+0x000002f38424) #14 IPC::ChannelProxy::Context::TryFilters(IPC::Message const&) ipc/ipc_channel_proxy.cc:103:31 (content_browsertests+0x000002f159ad) #15 IPC::SyncChannel::SyncContext::OnMessageReceived(IPC::Message const&) ipc/ipc_sync_channel.cc:428:7 (content_browsertests+0x000002f2ea8a) #16 IPC::ChannelMojo::OnMessageReceived(IPC::Message const&) ipc/ipc_channel_mojo.cc:394:14 (content_browsertests+0x000002f0b76c) #17 non-virtual thunk to IPC::ChannelMojo::OnMessageReceived(IPC::Message const&) ipc/ipc_channel_mojo.cc:386:19 (content_browsertests+0x000002f0ba94) #18 IPC::internal::MessagePipeReader::Receive(mojo::Array<unsigned char>, mojo::Array<mojo::StructPtr<IPC::mojom::SerializedHandle> >) ipc/ipc_message_pipe_reader.cc:152:14 (content_browsertests+0x000002f207fe) #19 IPC::mojom::ChannelStub::Accept(mojo::Message*) out/Release/gen/ipc/ipc.mojom.cc:693:14 (content_browsertests+0x000000b45090) #20 mojo::InterfaceEndpointClient::HandleValidatedMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:311:32 (content_browsertests+0x0000028a217b) #21 mojo::InterfaceEndpointClient::HandleIncomingMessageThunk::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:127:18 (content_browsertests+0x0000028a203a) #22 IPC::mojom::ChannelRequestValidator::Accept(mojo::Message*) out/Release/gen/ipc/ipc.mojom.cc:765:19 (content_browsertests+0x000000b455a6) #23 mojo::InterfaceEndpointClient::HandleIncomingMessage(mojo::Message*) mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:262:30 (content_browsertests+0x0000028a39bc) #24 IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) ipc/ipc_mojo_bootstrap.cc:645:20 (content_browsertests+0x000002f250a2) #25 non-virtual thunk to IPC::(anonymous namespace)::ChannelAssociatedGroupController::Accept(mojo::Message*) ipc/ipc_mojo_bootstrap.cc:590:8 (content_browsertests+0x000002f25af4) #26 mojo::MessageHeaderValidator::Accept(mojo::Message*) mojo/public/cpp/bindings/lib/message_header_validator.cc:93:17 (content_browsertests+0x0000028a774d) #27 mojo::Connector::ReadSingleMessage(unsigned int*) mojo/public/cpp/bindings/lib/connector.cc:276:51 (content_browsertests+0x00000289ff5b) #28 ReadAllAvailableMessages mojo/public/cpp/bindings/lib/connector.cc:302:10 (content_browsertests+0x0000028a0627) #29 mojo::Connector::OnHandleReadyInternal(unsigned int) mojo/public/cpp/bindings/lib/connector.cc:234 (content_browsertests+0x0000028a0627) #30 mojo::Connector::OnWatcherHandleReady(unsigned int) mojo/public/cpp/bindings/lib/connector.cc:214:3 (content_browsertests+0x0000028a0530) #31 Invoke<mojo::Connector *, unsigned int> base/bind_internal.h:214:12 (content_browsertests+0x0000028a0894) #32 MakeItSo<void (mojo::Connector::*const &)(unsigned int), mojo::Connector *, unsigned int> base/bind_internal.h:283 (content_browsertests+0x0000028a0894) #33 RunImpl<void (mojo::Connector::*const &)(unsigned int), const std::__1::tuple<base::internal::UnretainedWrapper<mojo::Connector> > &, 0> base/bind_internal.h:346 (content_browsertests+0x0000028a0894) #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:324 (content_browsertests+0x0000028a0894) #35 Run base/callback.h:388:12 (content_browsertests+0x000000b42784) #36 mojo::Watcher::OnHandleReady(unsigned int) mojo/public/cpp/system/watcher.cc:122 (content_browsertests+0x000000b42784) #37 mojo::Watcher::CallOnHandleReady(unsigned long, unsigned int, MojoHandleSignalsState, unsigned int) mojo/public/cpp/system/watcher.cc:142:14 (content_browsertests+0x000000b424f8) #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+0x0000040751fc) #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+0x00000407a09d) #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:283 (content_browsertests+0x00000407a09d) #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:346 (content_browsertests+0x00000407a09d) #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:324 (content_browsertests+0x00000407a09d) #43 Run base/callback.h:388:12 (content_browsertests+0x0000040a5c53) #44 mojo::edk::Watcher::MaybeInvokeCallback(unsigned int, mojo::edk::HandleSignalsState const&, unsigned int) mojo/edk/system/watcher.cc:24 (content_browsertests+0x0000040a5c53) #45 mojo::edk::RequestContext::~RequestContext() mojo/edk/system/request_context.cc:59:22 (content_browsertests+0x00000409d7a8) #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+0x0000040b1d88) #47 mojo::edk::Channel::OnReadComplete(unsigned long, unsigned long*) mojo/edk/system/channel.cc:563:18 (content_browsertests+0x0000040a9bab) #48 mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) mojo/edk/system/channel_posix.cc:288:14 (content_browsertests+0x0000040ac4f1) #49 non-virtual thunk to mojo::edk::(anonymous namespace)::ChannelPosix::OnFileCanReadWithoutBlocking(int) mojo/edk/system/channel_posix.cc:266:8 (content_browsertests+0x0000040ac7d4) #50 OnFileCanReadWithoutBlocking base/message_loop/message_pump_libevent.cc:95:13 (content_browsertests+0x000002c68b2b) #51 base::MessagePumpLibevent::OnLibeventNotification(int, short, void*) base/message_loop/message_pump_libevent.cc:344 (content_browsertests+0x000002c68b2b) #52 event_process_active base/third_party/libevent/event.c:381:4 (content_browsertests+0x000002d26ec5) #53 event_base_loop base/third_party/libevent/event.c:521 (content_browsertests+0x000002d26ec5) #54 base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_libevent.cc:254:9 (content_browsertests+0x000002c68f47) #55 base::MessageLoop::RunHandler() base/message_loop/message_loop.cc:451:10 (content_browsertests+0x000002c61ae0) #56 base::RunLoop::Run() base/run_loop.cc:35:10 (content_browsertests+0x000002c95dde) #57 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:228:13 (content_browsertests+0x000002cc73bb) #58 base::Thread::ThreadMain() base/threading/thread.cc:301:3 (content_browsertests+0x000002cc78f0) #59 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168) SUMMARY: ThreadSanitizer: data race third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:541:3 in aec_rdft_forward_128(float*) ==================
,
Aug 17 2016
Sometimes the access actually occurs before the initialization:
==================
WARNING: ThreadSanitizer: data race (pid=11131)
Write of size 8 at 0x00000a49d9d0 by thread T28 (mutexes: write M970382027272511120, write M641056029643329536, write M643026663718058176, write M643308138694768888):
#0 aec_rdft_init() third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:568:14 (content_browsertests+0x000001cd3bc4)
#1 webrtc::SignalClassifier::Initialize(int) third_party/webrtc/modules/audio_processing/level_controller/signal_classifier.cc:115:3 (content_browsertests+0x000001d138a3)
#2 webrtc::LevelController::Initialize(int) third_party/webrtc/modules/audio_processing/level_controller/level_controller.cc:166:22 (content_browsertests+0x000001d11317)
#3 InitializeLevelController third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:1279:42 (content_browsertests+0x000001ceb7aa)
#4 webrtc::AudioProcessingImpl::InitializeLocked() third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:329 (content_browsertests+0x000001ceb7aa)
#5 webrtc::AudioProcessingImpl::InitializeLocked(webrtc::ProcessingConfig const&) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:399:10 (content_browsertests+0x000001ceaf88)
#6 MaybeInitialize third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:279:10 (content_browsertests+0x000001ceeef4)
#7 MaybeInitializeCapture third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:266 (content_browsertests+0x000001ceeef4)
#8 webrtc::AudioProcessingImpl::ProcessStream(webrtc::AudioFrame*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:631 (content_browsertests+0x000001ceeef4)
#9 LimitMixedAudio third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc:913:33 (content_browsertests+0x000001cc5c8f)
#10 webrtc::AudioConferenceMixerImpl::Process() third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc:309 (content_browsertests+0x000001cc5c8f)
#11 webrtc::voe::OutputMixer::MixActiveChannels() third_party/webrtc/voice_engine/output_mixer.cc:209:18 (content_browsertests+0x000001ba48d5)
#12 GetPlayoutData third_party/webrtc/voice_engine/voe_base_impl.cc:748:28 (content_browsertests+0x000001bad8a7)
#13 PullRenderData third_party/webrtc/voice_engine/voe_base_impl.cc:135 (content_browsertests+0x000001bad8a7)
#14 non-virtual thunk to webrtc::VoEBaseImpl::PullRenderData(int, int, unsigned long, unsigned long, void*, long*, long*) third_party/webrtc/voice_engine/voe_base_impl.cc:126 (content_browsertests+0x000001bad8a7)
#15 content::WebRtcAudioDeviceImpl::RenderData(media::AudioBus*, int, int, base::TimeDelta*) content/renderer/media/webrtc_audio_device_impl.cc:97:30 (content_browsertests+0x00000436ffd0)
#16 non-virtual thunk to content::WebRtcAudioDeviceImpl::RenderData(media::AudioBus*, int, int, base::TimeDelta*) content/renderer/media/webrtc_audio_device_impl.cc:62:29 (content_browsertests+0x00000437015d)
#17 content::WebRtcAudioRenderer::SourceCallback(int, media::AudioBus*) content/renderer/media/webrtc_audio_renderer.cc:470:12 (content_browsertests+0x00000437789b)
#18 content::WebRtcAudioRenderer::Render(media::AudioBus*, unsigned int, unsigned int) content/renderer/media/webrtc_audio_renderer.cc:441:5 (content_browsertests+0x0000043775b3)
#19 media::AudioOutputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_output_device.cc:493:21 (content_browsertests+0x000000c519b7)
#20 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c3d08e)
#21 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168)
Previous read of size 8 at 0x00000a49d9d0 by thread T14 (mutexes: write M854695846204185848):
#0 cftfsub_128_C(float*) third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:439:3 (content_browsertests+0x000001cd554d)
#1 aec_rdft_forward_128(float*) third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:542:3 (content_browsertests+0x000001cd3a70)
#2 Fft third_party/webrtc/modules/audio_processing/aec/aec_core.cc:807:3 (content_browsertests+0x000001cce49b)
#3 ProcessBlock third_party/webrtc/modules/audio_processing/aec/aec_core.cc:1311 (content_browsertests+0x000001cce49b)
#4 webrtc::WebRtcAec_ProcessFrames(webrtc::AecCore*, float const* const*, unsigned long, unsigned long, int, float* const*) third_party/webrtc/modules/audio_processing/aec/aec_core.cc:1856 (content_browsertests+0x000001cce49b)
#5 ProcessNormal third_party/webrtc/modules/audio_processing/aec/echo_cancellation.cc:667:5 (content_browsertests+0x000001cd7ab8)
#6 webrtc::WebRtcAec_Process(void*, float const* const*, unsigned long, float* const*, unsigned long, short, int) third_party/webrtc/modules/audio_processing/aec/echo_cancellation.cc:351 (content_browsertests+0x000001cd7ab8)
#7 webrtc::EchoCancellationImpl::ProcessCaptureAudio(webrtc::AudioBuffer*, int) third_party/webrtc/modules/audio_processing/echo_cancellation_impl.cc:225:13 (content_browsertests+0x000001cfdafc)
#8 webrtc::AudioProcessingImpl::ProcessStreamLocked() third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:718:3 (content_browsertests+0x000001cedf9e)
#9 webrtc::AudioProcessingImpl::ProcessStream(float const* const*, webrtc::StreamConfig const&, webrtc::StreamConfig const&, float* const*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:567:3 (content_browsertests+0x000001ced1e1)
#10 webrtc::AudioProcessingImpl::ProcessStream(float const* const*, unsigned long, int, webrtc::AudioProcessing::ChannelLayout, int, webrtc::AudioProcessing::ChannelLayout, float* const*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:515:10 (content_browsertests+0x000001cecbd8)
#11 content::MediaStreamAudioProcessor::ProcessData(float const* const*, int, base::TimeDelta, int, bool, float* const*) content/renderer/media/media_stream_audio_processor.cc:795:13 (content_browsertests+0x000004498717)
#12 content::MediaStreamAudioProcessor::ProcessAndConsumeData(int, bool, media::AudioBus**, base::TimeDelta*, int*) content/renderer/media/media_stream_audio_processor.cc:375:19 (content_browsertests+0x000004497c15)
#13 content::ProcessedLocalAudioSource::Capture(media::AudioBus const*, int, double, bool) content/renderer/media/webrtc/processed_local_audio_source.cc:321:28 (content_browsertests+0x0000043685e2)
#14 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+0x000004368726)
#15 media::AudioInputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_input_device.cc:345:22 (content_browsertests+0x000000c44b12)
#16 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c3d08e)
#17 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168)
Location is global 'cftmdl_128' of size 8 at 0x00000a49d9d0 (content_browsertests+0x00000a49d9d0)
,
Aug 17 2016
,
Aug 17 2016
peah: can you have a look?
,
Aug 22 2016
Absolutely, will do!
,
Aug 24 2016
I'm landing the following suppression for this bug: https://codereview.chromium.org/2267173004 Please note this is by no means a fix.
,
Aug 24 2016
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/d2ec51c59013680890442ce62e13afa0c2481d1d commit d2ec51c59013680890442ce62e13afa0c2481d1d Author: glider <glider@chromium.org> Date: Wed Aug 24 16:33:10 2016 Suppress data races in third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc TBR=peah@chromium.org BUG= 638583 NOTRY=true Review-Url: https://codereview.chromium.org/2267173004 Cr-Commit-Position: refs/heads/master@{#414089} [modify] https://crrev.com/d2ec51c59013680890442ce62e13afa0c2481d1d/build/sanitizers/tsan_suppressions.cc
,
Sep 16 2016
I think I have identified the issue, which is that aec_rdft is not threadsafe as it has globally defined function pointers (at least I think that is the case). That should be fairly straightforward to fix that by moving the function pointers into a state. I will try that.
,
Oct 6 2016
The following revision refers to this bug: https://chromium.googlesource.com/external/webrtc.git/+/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188 commit 81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188 Author: peah <peah@webrtc.org> Date: Thu Oct 06 13:46:20 2016 The FFT functionality in aec_rdft* is based on legacy C code which is not thread-safe in the sense that the rdft_init method can only be run in a single-threaded. Currently, inside WebRTC multiple instances of the audio- processing module are set up which means that the init method may be run concurrently. In order to avoid having to protect the init method with a lock to ensure single-threaded behavior that, this CL places the FFT functionality inside a class so that there is no global component of the FFT functionality. Note that: 1) The nonstandard header for the ooura_fft.cc was copied from the aec_rdft.cc header, and augmented with a description of the changes introduced in this CL. 2) The clang warnings for the ooura_fft_sse2.cc, ooura_fft_neon.cc and ooura_fft_mips.cc were not addressed as this code was kept as it was before this CL 3) Clang-format was run on all files apart from ooura_fft_mips.cc (as that would change the format of the inline assempbly code). Adding bypass of presubmit to avoid code style and header errors caused by the fact that files with legacy code are being renamed. NOPRESUBMIT=true BUG= chromium:638583 Review-Url: https://codereview.webrtc.org/2348213002 Cr-Commit-Position: refs/heads/master@{#14554} [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/BUILD.gn [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/aec/aec_core.cc [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/aec/aec_core.h [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/aec/aec_core_mips.cc [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/aec/aec_core_neon.cc [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/aec/aec_core_optimized_methods.h [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/aec/aec_core_sse2.cc [delete] https://crrev.com/21a18ee267146c86e188d95edf6432f71dd53aeb/webrtc/modules/audio_processing/aec/aec_rdft.h [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/audio_processing.gypi [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/level_controller/signal_classifier.cc [modify] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/level_controller/signal_classifier.h [rename] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft.cc [add] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft.h [rename] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft_mips.cc [rename] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft_neon.cc [rename] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft_sse2.cc [add] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft_tables_common.h [add] https://crrev.com/81b9291dfddbfe1bd940ac7aab9a1b41c2b9c188/webrtc/modules/audio_processing/utility/ooura_fft_tables_neon_sse2.h
,
Oct 14 2016
The issue should now be fixed! glider@ could you please verify that the error is no longer present?
,
Nov 7 2016
Closing for now as the issue should be fixed by the code changes. Please reopen if the issue occurs again!
,
Mar 15 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/ba0d317cba4476cd306db516d13f704bfd5bf9ff commit ba0d317cba4476cd306db516d13f704bfd5bf9ff Author: maxmorin <maxmorin@chromium.org> Date: Wed Mar 15 14:22:32 2017 Remove suppressions for some bugs that are closed as fixed. BUG= 280466 , 285242 , 345618 , 345624 , 347548 , 417193 , 638583 Review-Url: https://codereview.chromium.org/2755453003 Cr-Commit-Position: refs/heads/master@{#457076} [modify] https://crrev.com/ba0d317cba4476cd306db516d13f704bfd5bf9ff/build/sanitizers/tsan_suppressions.cc |
|||||
►
Sign in to add a comment |
|||||
Comment 1 by glider@chromium.org
, Aug 17 2016Yet another error: ================== WARNING: ThreadSanitizer: data race (pid=11046) Read of size 8 at 0x00000a49d9c8 by thread T14 (mutexes: write M885658093642358008): #0 cftfsub_128_C(float*) third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:438:3 (content_browsertests+0x000001cd5538) #1 aec_rdft_forward_128(float*) third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:542:3 (content_browsertests+0x000001cd3a70) #2 Fft third_party/webrtc/modules/audio_processing/aec/aec_core.cc:807:3 (content_browsertests+0x000001cce49b) #3 ProcessBlock third_party/webrtc/modules/audio_processing/aec/aec_core.cc:1311 (content_browsertests+0x000001cce49b) #4 webrtc::WebRtcAec_ProcessFrames(webrtc::AecCore*, float const* const*, unsigned long, unsigned long, int, float* const*) third_party/webrtc/modules/audio_processing/aec/aec_core.cc:1856 (content_browsertests+0x000001cce49b) #5 ProcessNormal third_party/webrtc/modules/audio_processing/aec/echo_cancellation.cc:667:5 (content_browsertests+0x000001cd7ab8) #6 webrtc::WebRtcAec_Process(void*, float const* const*, unsigned long, float* const*, unsigned long, short, int) third_party/webrtc/modules/audio_processing/aec/echo_cancellation.cc:351 (content_browsertests+0x000001cd7ab8) #7 webrtc::EchoCancellationImpl::ProcessCaptureAudio(webrtc::AudioBuffer*, int) third_party/webrtc/modules/audio_processing/echo_cancellation_impl.cc:225:13 (content_browsertests+0x000001cfdafc) #8 webrtc::AudioProcessingImpl::ProcessStreamLocked() third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:718:3 (content_browsertests+0x000001cedf9e) #9 webrtc::AudioProcessingImpl::ProcessStream(float const* const*, webrtc::StreamConfig const&, webrtc::StreamConfig const&, float* const*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:567:3 (content_browsertests+0x000001ced1e1) #10 webrtc::AudioProcessingImpl::ProcessStream(float const* const*, unsigned long, int, webrtc::AudioProcessing::ChannelLayout, int, webrtc::AudioProcessing::ChannelLayout, float* const*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:515:10 (content_browsertests+0x000001cecbd8) #11 content::MediaStreamAudioProcessor::ProcessData(float const* const*, int, base::TimeDelta, int, bool, float* const*) content/renderer/media/media_stream_audio_processor.cc:795:13 (content_browsertests+0x000004498717) #12 content::MediaStreamAudioProcessor::ProcessAndConsumeData(int, bool, media::AudioBus**, base::TimeDelta*, int*) content/renderer/media/media_stream_audio_processor.cc:375:19 (content_browsertests+0x000004497c15) #13 content::ProcessedLocalAudioSource::Capture(media::AudioBus const*, int, double, bool) content/renderer/media/webrtc/processed_local_audio_source.cc:321:28 (content_browsertests+0x0000043685e2) #14 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+0x000004368726) #15 media::AudioInputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_input_device.cc:345:22 (content_browsertests+0x000000c44b12) #16 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c3d08e) #17 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168) Previous write of size 8 at 0x00000a49d9c8 by thread T28 (mutexes: write M108224173607772816, write M726342947586658304, write M728313581661386944, write M728595056638097656): #0 aec_rdft_init() third_party/webrtc/modules/audio_processing/aec/aec_rdft.cc:567:14 (content_browsertests+0x000001cd3baa) #1 webrtc::SignalClassifier::Initialize(int) third_party/webrtc/modules/audio_processing/level_controller/signal_classifier.cc:115:3 (content_browsertests+0x000001d138a3) #2 webrtc::LevelController::Initialize(int) third_party/webrtc/modules/audio_processing/level_controller/level_controller.cc:166:22 (content_browsertests+0x000001d11317) #3 InitializeLevelController third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:1279:42 (content_browsertests+0x000001ceb7aa) #4 webrtc::AudioProcessingImpl::InitializeLocked() third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:329 (content_browsertests+0x000001ceb7aa) #5 webrtc::AudioProcessingImpl::InitializeLocked(webrtc::ProcessingConfig const&) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:399:10 (content_browsertests+0x000001ceaf88) #6 MaybeInitialize third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:279:10 (content_browsertests+0x000001ceeef4) #7 MaybeInitializeCapture third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:266 (content_browsertests+0x000001ceeef4) #8 webrtc::AudioProcessingImpl::ProcessStream(webrtc::AudioFrame*) third_party/webrtc/modules/audio_processing/audio_processing_impl.cc:631 (content_browsertests+0x000001ceeef4) #9 LimitMixedAudio third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc:913:33 (content_browsertests+0x000001cc5c8f) #10 webrtc::AudioConferenceMixerImpl::Process() third_party/webrtc/modules/audio_conference_mixer/source/audio_conference_mixer_impl.cc:309 (content_browsertests+0x000001cc5c8f) #11 webrtc::voe::OutputMixer::MixActiveChannels() third_party/webrtc/voice_engine/output_mixer.cc:209:18 (content_browsertests+0x000001ba48d5) #12 GetPlayoutData third_party/webrtc/voice_engine/voe_base_impl.cc:748:28 (content_browsertests+0x000001bad8a7) #13 PullRenderData third_party/webrtc/voice_engine/voe_base_impl.cc:135 (content_browsertests+0x000001bad8a7) #14 non-virtual thunk to webrtc::VoEBaseImpl::PullRenderData(int, int, unsigned long, unsigned long, void*, long*, long*) third_party/webrtc/voice_engine/voe_base_impl.cc:126 (content_browsertests+0x000001bad8a7) #15 content::WebRtcAudioDeviceImpl::RenderData(media::AudioBus*, int, int, base::TimeDelta*) content/renderer/media/webrtc_audio_device_impl.cc:97:30 (content_browsertests+0x00000436ffd0) #16 non-virtual thunk to content::WebRtcAudioDeviceImpl::RenderData(media::AudioBus*, int, int, base::TimeDelta*) content/renderer/media/webrtc_audio_device_impl.cc:62:29 (content_browsertests+0x00000437015d) #17 content::WebRtcAudioRenderer::SourceCallback(int, media::AudioBus*) content/renderer/media/webrtc_audio_renderer.cc:470:12 (content_browsertests+0x00000437789b) #18 content::WebRtcAudioRenderer::Render(media::AudioBus*, unsigned int, unsigned int) content/renderer/media/webrtc_audio_renderer.cc:441:5 (content_browsertests+0x0000043775b3) #19 media::AudioOutputDevice::AudioThreadCallback::Process(unsigned int) media/audio/audio_output_device.cc:493:21 (content_browsertests+0x000000c519b7) #20 media::AudioDeviceThread::ThreadMain() media/audio/audio_device_thread.cc:84:18 (content_browsertests+0x000000c3d08e) #21 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (content_browsertests+0x000002cc0168) Location is global 'cft1st_128' of size 8 at 0x00000a49d9c8 (content_browsertests+0x00000a49d9c8)