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

Issue 792140 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Dec 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 1
Type: Bug

Blocking:
issue 774365



Sign in to add a comment

AudioContextTest.AudioContextOptions_WebAudioLatencyHint fails on linux_chromium_tsan_rel_ng

Project Member Reported by w...@chromium.org, Dec 5 2017

Issue description

This test fails 100% of the time on the linux_chromium_tsan_rel_ng try-bot.

See the webkit_layout_tests failure in https://ci.chromium.org/buildbot/tryserver.chromium.linux/linux_chromium_tsan_rel_ng/210473, e.g:

WARNING: ThreadSanitizer: data race (pid=3380)
  Write of size 1 at 0x7b1400039641 by main thread:
    #0 memmove /b/build/slave/linux_upload_clang/build/src/third_party/llvm/compiler-rt/lib/tsan/../sanitizer_common/sanitizer_common_interceptors.inc:722:3 (webkit_unit_tests+0x15b6d5d)
    #1 move buildtools/third_party/libc++/trunk/include/__string:221:48 (libc++.so+0xef06f)
    #2 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::assign(char const*, unsigned long) buildtools/third_party/libc++/trunk/include/string:1982 (libc++.so+0xef06f)
    #3 std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::operator=(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) buildtools/third_party/libc++/trunk/include/string:2042:9 (libc++.so+0xeef8e)
    #4 operator=<const std::__1::pair<const std::__1::basic_string<char>, std::__1::basic_string<char> > &, false> buildtools/third_party/libc++/trunk/include/utility:522:15 (webkit_unit_tests+0x56c3e8a)
    #5 operator= buildtools/third_party/libc++/trunk/include/map:629 (webkit_unit_tests+0x56c3e8a)
    #6 void std::__1::__tree<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__map_value_compare<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::less<void>, true>, std::__1::allocator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > >::__assign_multi<std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long> >(std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long>, std::__1::__tree_const_iterator<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, std::__1::__tree_node<std::__1::__value_type<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >, void*>*, long>) buildtools/third_party/libc++/trunk/include/__tree:1645 (webkit_unit_tests+0x56c3e8a)
    #7 operator= buildtools/third_party/libc++/trunk/include/__tree:1575:9 (webkit_unit_tests+0x56c165d)
    #8 operator= buildtools/third_party/libc++/trunk/include/map:912 (webkit_unit_tests+0x56c165d)
    #9 base::CommandLine::operator=(base::CommandLine const&) base/command_line.cc:179 (webkit_unit_tests+0x56c165d)
    #10 base::(anonymous namespace)::TestClientInitializer::OnTestEnd(testing::TestInfo const&) base/test/test_suite.cc:91:39 (webkit_unit_tests+0x8d3f9b5)
    #11 testing::internal::TestEventRepeater::OnTestEnd(testing::TestInfo const&) third_party/googletest/src/googletest/src/gtest.cc:3348:1 (webkit_unit_tests+0x2d050fe)
    #12 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2665:13 (webkit_unit_tests+0x2d00d49)
    #13 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2772:28 (webkit_unit_tests+0x2d01466)
    #14 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4677:43 (webkit_unit_tests+0x2d0a886)
    #15 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc (webkit_unit_tests+0x2d0a285)
    #16 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (webkit_unit_tests+0x8d3e4e6)
    #17 base::TestSuite::Run() base/test/test_suite.cc:272 (webkit_unit_tests+0x8d3e4e6)
    #18 (anonymous namespace)::runHelper(base::TestSuite*) third_party/WebKit/Source/controller/tests/RunAllTests.cpp:48:27 (webkit_unit_tests+0x1614bce)
    #19 Invoke<base::TestSuite *> base/bind_internal.h:166:12 (webkit_unit_tests+0x1615244)
    #20 MakeItSo<int (*const &)(base::TestSuite *), base::TestSuite *> base/bind_internal.h:294 (webkit_unit_tests+0x1615244)
    #21 RunImpl<int (*const &)(base::TestSuite *), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:368 (webkit_unit_tests+0x1615244)
    #22 base::internal::Invoker<base::internal::BindState<int (*)(base::TestSuite*), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350 (webkit_unit_tests+0x1615244)
    #23 Run base/callback.h:94:12 (webkit_unit_tests+0x8d41836)
    #24 base::(anonymous namespace)::LaunchUnitTestsInternal(base::RepeatingCallback<int ()> const&, unsigned long, int, bool, base::RepeatingCallback<void ()> const&) base/test/launcher/unit_test_launcher.cc:220 (webkit_unit_tests+0x8d41836)
    #25 base::LaunchUnitTests(int, char**, base::RepeatingCallback<int ()> const&) base/test/launcher/unit_test_launcher.cc:558:10 (webkit_unit_tests+0x8d41663)
    #26 main third_party/WebKit/Source/controller/tests/RunAllTests.cpp:70:10 (webkit_unit_tests+0x1614b45)
  Previous read of size 1 at 0x7b1400039641 by thread T14:
    [failed to restore the stack]
  Location is heap block of size 80 at 0x7b1400039620 allocated by main thread:
    #0 operator new(unsigned long) /b/build/slave/linux_upload_clang/build/src/third_party/llvm/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc:44:3 (webkit_unit_tests+0x1613ee9)
    #1 __allocate buildtools/third_party/libc++/trunk/include/new:226:10 (webkit_unit_tests+0x56c249f)
    #2 allocate buildtools/third_party/libc++/trunk/include/memory:1747 (webkit_unit_tests+0x56c249f)
    #3 allocate buildtools/third_party/libc++/trunk/include/memory:1502 (webkit_unit_tests+0x56c249f)
    #4 __construct_node<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> > > buildtools/third_party/libc++/trunk/include/__tree:2191 (webkit_unit_tests+0x56c249f)
    #5 __emplace_unique_key_args<std::__1::basic_string<char>, std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> > > buildtools/third_party/libc++/trunk/include/__tree:2137 (webkit_unit_tests+0x56c249f)
    #6 __emplace_unique_extract_key<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> > > buildtools/third_party/libc++/trunk/include/__tree:1214 (webkit_unit_tests+0x56c249f)
    #7 __emplace_unique<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> > > buildtools/third_party/libc++/trunk/include/__tree:1176 (webkit_unit_tests+0x56c249f)
    #8 __insert_unique<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> >, void> buildtools/third_party/libc++/trunk/include/__tree:1304 (webkit_unit_tests+0x56c249f)
    #9 insert<std::__1::pair<std::__1::basic_string<char>, std::__1::basic_string<char> >, void> buildtools/third_party/libc++/trunk/include/map:1054 (webkit_unit_tests+0x56c249f)
    #10 base::CommandLine::AppendSwitchNative(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) base/command_line.cc:332 (webkit_unit_tests+0x56c249f)
    #11 base::(anonymous namespace)::AppendSwitchesAndArguments(base::CommandLine*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) base/command_line.cc:94:21 (webkit_unit_tests+0x56c1c94)
    #12 base::CommandLine::InitFromArgv(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) base/command_line.cc:262:3 (webkit_unit_tests+0x56c13a3)
    #13 base::CommandLine::InitFromArgv(int, char const* const*) base/command_line.cc:254:3 (webkit_unit_tests+0x56c111d)
    #14 base::CommandLine::Init(int, char const* const*) base/command_line.cc:216:33 (webkit_unit_tests+0x56c1849)
    #15 InitializeFromCommandLine base/test/test_suite.cc:165:31 (webkit_unit_tests+0x8d3e604)
    #16 base::TestSuite::TestSuite(int, char**) base/test/test_suite.cc:142 (webkit_unit_tests+0x8d3e604)
    #17 main third_party/WebKit/Source/controller/tests/RunAllTests.cpp:69:19 (webkit_unit_tests+0x1614ae1)
  Thread T14 (tid=3442, running) created by main thread at:
    #0 pthread_create /b/build/slave/linux_upload_clang/build/src/third_party/llvm/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:921:3 (webkit_unit_tests+0x15ad433)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:114:13 (webkit_unit_tests+0x576d9c6)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:199:10 (webkit_unit_tests+0x576d885)
    #3 base::Thread::StartWithOptions(base::Thread::Options const&) base/threading/thread.cc:112:15 (webkit_unit_tests+0x5779489)
    #4 blink::scheduler::WebThreadImplForWorkerScheduler::WebThreadImplForWorkerScheduler(char const*, base::Thread::Options) third_party/WebKit/Source/platform/scheduler/child/webthread_impl_for_worker_scheduler.cc:30:27 (webkit_unit_tests+0x2c5ef93)
    #5 make_unique<blink::scheduler::WebThreadImplForWorkerScheduler, const char *&, base::Thread::Options &> buildtools/third_party/libc++/trunk/include/memory:3026:32 (webkit_unit_tests+0x2c5ec7c)
    #6 blink::scheduler::WebThreadBase::CreateWorkerThread(char const*, base::Thread::Options) third_party/WebKit/Source/platform/scheduler/child/webthread_base.cc:133 (webkit_unit_tests+0x2c5ec7c)
    #7 content::BlinkPlatformImpl::CreateThread(char const*) content/child/blink_platform_impl.cc:352:7 (webkit_unit_tests+0x936187d)
    #8 blink::(anonymous namespace)::AudioContextTestPlatform::CreateThread(char const*) third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp:78:27 (webkit_unit_tests+0x4f68842)
    #9 blink::WebThreadSupportingGC::WebThreadSupportingGC(char const*, blink::WebThread*) third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp:38:43 (webkit_unit_tests+0x6566e48)
    #10 blink::WebThreadSupportingGC::CreateForThread(blink::WebThread*) third_party/WebKit/Source/platform/WebThreadSupportingGC.cpp:23:30 (webkit_unit_tests+0x6566ce9)
    #11 blink::WorkerBackingThread::WorkerBackingThread(blink::WebThread*, bool) third_party/WebKit/Source/core/workers/WorkerBackingThread.cpp:67:23 (webkit_unit_tests+0x8439c36)
    #12 CreateForTest third_party/WebKit/Source/core/workers/WorkerBackingThread.h:42:32 (webkit_unit_tests+0x8b51e99)
    #13 blink::WorkletThreadHolder<blink::AudioWorkletThread>::CreateForTest(blink::WebThread*) third_party/WebKit/Source/core/workers/WorkletThreadHolder.h:60 (webkit_unit_tests+0x8b51e99)
    #14 blink::AudioWorkletThread::CreateSharedBackingThreadForTest() third_party/WebKit/Source/modules/webaudio/AudioWorkletThread.cpp:101:3 (webkit_unit_tests+0x8b52d45)
    #15 blink::AudioContextTest::SetUp() third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp:97:5 (webkit_unit_tests+0x4f67baf)
    #16 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc (webkit_unit_tests+0x2cffce6)
    #17 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2654:11 (webkit_unit_tests+0x2d00c1d)
    #18 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2772:28 (webkit_unit_tests+0x2d01466)
    #19 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4677:43 (webkit_unit_tests+0x2d0a886)
    #20 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc (webkit_unit_tests+0x2d0a285)
    #21 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (webkit_unit_tests+0x8d3e4e6)
    #22 base::TestSuite::Run() base/test/test_suite.cc:272 (webkit_unit_tests+0x8d3e4e6)
    #23 (anonymous namespace)::runHelper(base::TestSuite*) third_party/WebKit/Source/controller/tests/RunAllTests.cpp:48:27 (webkit_unit_tests+0x1614bce)
    #24 Invoke<base::TestSuite *> base/bind_internal.h:166:12 (webkit_unit_tests+0x1615244)
    #25 MakeItSo<int (*const &)(base::TestSuite *), base::TestSuite *> base/bind_internal.h:294 (webkit_unit_tests+0x1615244)
    #26 RunImpl<int (*const &)(base::TestSuite *), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:368 (webkit_unit_tests+0x1615244)
    #27 base::internal::Invoker<base::internal::BindState<int (*)(base::TestSuite*), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350 (webkit_unit_tests+0x1615244)
    #28 Run base/callback.h:94:12 (webkit_unit_tests+0x8d41836)
    #29 base::(anonymous namespace)::LaunchUnitTestsInternal(base::RepeatingCallback<int ()> const&, unsigned long, int, bool, base::RepeatingCallback<void ()> const&) base/test/launcher/unit_test_launcher.cc:220 (webkit_unit_tests+0x8d41836)
    #30 base::LaunchUnitTests(int, char**, base::RepeatingCallback<int ()> const&) base/test/launcher/unit_test_launcher.cc:558:10 (webkit_unit_tests+0x8d41663)
    #31 main third_party/WebKit/Source/controller/tests/RunAllTests.cpp:70:10 (webkit_unit_tests+0x1614b45)
SUMMARY: ThreadSanitizer: data race buildtools/third_party/libc++/trunk/include/__string:221:48 in move
 

Comment 1 by w...@chromium.org, Dec 5 2017

Labels: Stability-ThreadSanitizer
Owner: hongchan@chromium.org
Status: Assigned (was: Untriaged)
hongchan: PTAL ASAP; this appears to be showing a legitimate race.
Components: -Blink>Media>Audio Blink>WebAudio

Comment 3 by kbr@chromium.org, Dec 5 2017

Blocking: 774365
If this test is really blocking CLs from going through the CQ then it should be disabled on TSAN immediately with an #ifdef.

Project Member

Comment 4 by bugdroid1@chromium.org, Dec 5 2017

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

commit 0a1def1f52dfb09095d988cc40245102e9d362e1
Author: Hongchan Choi <hongchan@chromium.org>
Date: Tue Dec 05 22:38:08 2017

Remove AudioWorkletThread from AudioContextTest.cpp

AudioContextTest.cpp tests the audio latency and is not involved
any AudioWorklet operation. Removing AudioWorkletThread addresses
the data race found in the bug.

Locally confirmed that TSAN with this patch does not crash with
the data race any more.

Bug:  792140 
Change-Id: I297533a176c42fb1af5025fdcd77a1cf4e68ee56
Reviewed-on: https://chromium-review.googlesource.com/809825
Reviewed-by: Kenneth Russell <kbr@chromium.org>
Reviewed-by: Raymond Toy <rtoy@chromium.org>
Commit-Queue: Hongchan Choi <hongchan@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521866}
[modify] https://crrev.com/0a1def1f52dfb09095d988cc40245102e9d362e1/third_party/WebKit/Source/modules/webaudio/AudioContextTest.cpp

Status: Fixed (was: Assigned)
I don't see failure any more:
https://ci.chromium.org/buildbot/tryserver.chromium.linux/linux_chromium_tsan_rel_ng/211048

I am marking this as fixed and will monitor linux_chromium_tsan_rel_ng bot another 24 hours.
Seems that all the AudioContext/AudioWorklet tests are passing now:
https://ci.chromium.org/buildbot/tryserver.chromium.linux/linux_chromium_tsan_rel_ng/211692

Sign in to add a comment