ThreadSanitizer: data race base/threading/thread_local_storage.cc:299:9 in base::ThreadLocalStorage::StaticSlot::Free() |
|||
Issue descriptionFirst failing build: https://build.chromium.org/p/chromium.memory.full/builders/Linux%20TSan%20Tests/builds/2906 Suspect CL: https://chromiumcodereview.appspot.com/2429863002 Log: MemoryDumpManagerTest.PostTaskForSequencedTaskRunner (run #1): [ RUN ] MemoryDumpManagerTest.PostTaskForSequencedTaskRunner [14570:14570:1023/073600:25455694102:ERROR:memory_dump_manager.cc(524)] Disabling MemoryDumpProvider "TestDumpProvider". Failed to post task on the task runner provided. ================== WARNING: ThreadSanitizer: data race (pid=14570) Write of size 4 at 0x7b5c00000634 by main thread: #0 base::ThreadLocalStorage::StaticSlot::Free() base/threading/thread_local_storage.cc:299:9 (base_unittests+0x000000cdeb86) #1 base::ThreadLocalStorage::Slot::~Slot() base/threading/thread_local_storage.cc:334:13 (base_unittests+0x000000cded49) #2 ~ThreadLocalPointer base/threading/thread_local.h:62:4 (base_unittests+0x000000d0a1e1) #3 ~ThreadLocalBoolean base/threading/thread_local.h:81 (base_unittests+0x000000d0a1e1) #4 base::trace_event::TraceLog::~TraceLog() base/trace_event/trace_log.cc:500 (base_unittests+0x000000d0a1e1) #5 base::trace_event::TraceLog::~TraceLog() base/trace_event/trace_log.cc:500:23 (base_unittests+0x000000d0a619) #6 Delete base/memory/singleton.h:60:5 (base_unittests+0x000000d110e5) #7 OnExit base/memory/singleton.h:274 (base_unittests+0x000000d110e5) #8 Delete base/trace_event/trace_log.cc:55 (base_unittests+0x000000d110e5) #9 base::trace_event::TraceLog::DeleteForTesting() base/trace_event/trace_log.cc:1701 (base_unittests+0x000000d110e5) #10 base::trace_event::MemoryDumpManagerTest::TearDown() base/trace_event/memory_dump_manager_unittest.cc:221:5 (base_unittests+0x000000b1937f) #11 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0x000000d793ee) #12 testing::Test::Run() testing/gtest/src/gtest.cc:2482 (base_unittests+0x000000d793ee) #13 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0x000000d7a20d) #14 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0x000000d7aae6) #15 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0x000000d83f46) #16 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0x000000d838f4) #17 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0x000000d838f4) #18 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0x000000d3a4a4) #19 base::TestSuite::Run() base/test/test_suite.cc:246 (base_unittests+0x000000d3a4a4) #20 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0x000000d2d805) #21 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0x000000d2d805) #22 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0x000000d2d805) #23 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (base_unittests+0x000000d2d805) #24 Run base/callback.h:64:12 (base_unittests+0x000000d48c23) #25 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, int, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:210 (base_unittests+0x000000d48c23) #26 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:452:10 (base_unittests+0x000000d48aaa) #27 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0x000000d2d761) Previous read of size 4 at 0x7b5c00000634 by thread T3 (mutexes: write M3353): #0 Set base/threading/thread_local_storage.cc:325:12 (base_unittests+0x000000cdee3d) #1 base::ThreadLocalStorage::Slot::Set(void*) base/threading/thread_local_storage.cc:342 (base_unittests+0x000000cdee3d) #2 Set base/threading/thread_local.h:69:11 (base_unittests+0x000000d10ef9) #3 Set base/threading/thread_local.h:88 (base_unittests+0x000000d10ef9) #4 ~AutoThreadLocalBoolean base/trace_event/trace_log.cc:240 (base_unittests+0x000000d10ef9) #5 base::trace_event::TraceLog::UpdateTraceEventDuration(unsigned char const*, char const*, base::trace_event::TraceEventHandle) base/trace_event/trace_log.cc:1629 (base_unittests+0x000000d10ef9) #6 ~ScopedTracer base/trace_event/trace_event.h:1005:7 (base_unittests+0x000000cd4a07) #7 base::SequencedWorkerPool::Inner::ThreadLoop(base::SequencedWorkerPool::Worker*) base/threading/sequenced_worker_pool.cc:1034 (base_unittests+0x000000cd4a07) #8 base::SequencedWorkerPool::Worker::Run() base/threading/sequenced_worker_pool.cc:611:25 (base_unittests+0x000000cd3ed1) #9 base::SimpleThread::ThreadMain() base/threading/simple_thread.cc:68:3 (base_unittests+0x000000cd9612) #10 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (base_unittests+0x000000cd318d) Location is heap block of size 800 at 0x7b5c00000380 allocated by main thread: #0 operator new(unsigned long) <null> (base_unittests+0x00000051cce2) #1 New base/memory/singleton.h:55:12 (base_unittests+0x000000d09a95) #2 get base/memory/singleton.h:250 (base_unittests+0x000000d09a95) #3 base::trace_event::TraceLog::GetInstance() base/trace_event/trace_log.cc:461 (base_unittests+0x000000d09a95) #4 base::trace_event::MemoryDumpManager::Initialize(base::trace_event::MemoryDumpManagerDelegate*, bool) base/trace_event/memory_dump_manager.cc:230:37 (base_unittests+0x000000ceb66b) #5 InitializeMemoryDumpManager base/trace_event/memory_dump_manager_unittest.cc:237:11 (base_unittests+0x000000b09fb0) #6 base::trace_event::MemoryDumpManagerTest_PostTaskForSequencedTaskRunner_Test::TestBody() base/trace_event/memory_dump_manager_unittest.cc:539 (base_unittests+0x000000b09fb0) #7 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0x000000d792ec) #8 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0x000000d792ec) #9 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0x000000d7a20d) #10 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0x000000d7aae6) #11 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0x000000d83f46) #12 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0x000000d838f4) #13 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0x000000d838f4) #14 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0x000000d3a4a4) #15 base::TestSuite::Run() base/test/test_suite.cc:246 (base_unittests+0x000000d3a4a4) #16 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0x000000d2d805) #17 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0x000000d2d805) #18 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0x000000d2d805) #19 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (base_unittests+0x000000d2d805) #20 Run base/callback.h:64:12 (base_unittests+0x000000d48c23) #21 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, int, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:210 (base_unittests+0x000000d48c23) #22 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:452:10 (base_unittests+0x000000d48aaa) #23 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0x000000d2d761) Mutex M3353 (0x7b5000001c08) created at: #0 pthread_mutex_init <null> (base_unittests+0x0000004bfa03) #1 base::internal::LockImpl::LockImpl() base/synchronization/lock_impl_posix.cc:45:8 (base_unittests+0x000000cb44fd) #2 Lock base/synchronization/lock.h:24:12 (base_unittests+0x000000cd709e) #3 Inner base/threading/sequenced_worker_pool.cc:638 (base_unittests+0x000000cd709e) #4 base::SequencedWorkerPool::SequencedWorkerPool(unsigned long, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, base::TaskPriority) base/threading/sequenced_worker_pool.cc:1467 (base_unittests+0x000000cd709e) #5 TestSequencedTaskRunner base/trace_event/memory_dump_manager_unittest.cc:165:26 (base_unittests+0x000000b0a140) #6 base::trace_event::MemoryDumpManagerTest_PostTaskForSequencedTaskRunner_Test::TestBody() base/trace_event/memory_dump_manager_unittest.cc:544 (base_unittests+0x000000b0a140) #7 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0x000000d792ec) #8 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0x000000d792ec) #9 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0x000000d7a20d) #10 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0x000000d7aae6) #11 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0x000000d83f46) #12 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0x000000d838f4) #13 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0x000000d838f4) #14 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0x000000d3a4a4) #15 base::TestSuite::Run() base/test/test_suite.cc:246 (base_unittests+0x000000d3a4a4) #16 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0x000000d2d805) #17 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0x000000d2d805) #18 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0x000000d2d805) #19 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (base_unittests+0x000000d2d805) #20 Run base/callback.h:64:12 (base_unittests+0x000000d48c23) #21 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, int, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:210 (base_unittests+0x000000d48c23) #22 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:452:10 (base_unittests+0x000000d48aaa) #23 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0x000000d2d761) Thread T3 'Test Task Runne' (tid=14602, running) created by thread T2 at: #0 pthread_create <null> (base_unittests+0x0000004be9f5) #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (base_unittests+0x000000cd2c87) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191:10 (base_unittests+0x000000cd2b85) #3 base::SimpleThread::Start() base/threading/simple_thread.cc:35:13 (base_unittests+0x000000cd94c3) #4 base::SequencedWorkerPool::Worker::Worker(scoped_refptr<base::SequencedWorkerPool>, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) base/threading/sequenced_worker_pool.cc:587:3 (base_unittests+0x000000cd3d1f) #5 base::SequencedWorkerPool::Inner::FinishStartingAdditionalThread(int) base/threading/sequenced_worker_pool.cc:1388:7 (base_unittests+0x000000cd6121) #6 base::SequencedWorkerPool::Inner::PostTask(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const*, base::SequencedWorkerPool::SequenceToken, base::SequencedWorkerPool::WorkerShutdown, tracked_objects::Location const&, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, base::TimeDelta) base/threading/sequenced_worker_pool.cc:762:7 (base_unittests+0x000000cd5d2b) #7 base::SequencedWorkerPool::PostSequencedWorkerTask(base::SequencedWorkerPool::SequenceToken, tracked_objects::Location const&, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/threading/sequenced_worker_pool.cc:1552:18 (base_unittests+0x000000cd7c13) #8 base::trace_event::TestSequencedTaskRunner::PostDelayedTask(tracked_objects::Location const&, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, base::TimeDelta) base/trace_event/memory_dump_manager_unittest.cc:186:28 (base_unittests+0x000000b1f921) #9 base::TaskRunner::PostTask(tracked_objects::Location const&, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/task_runner.cc:45:10 (base_unittests+0x000000cbbdd3) #10 base::trace_event::MemoryDumpManager::SetupNextMemoryDump(std::__1::unique_ptr<base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState, std::__1::default_delete<base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState> >) base/trace_event/memory_dump_manager.cc:509:37 (base_unittests+0x000000cecc9c) #11 base::trace_event::MemoryDumpManager::InvokeOnMemoryDump(base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState*) base/trace_event/memory_dump_manager.cc:601:3 (base_unittests+0x000000ced867) #12 Invoke<base::trace_event::MemoryDumpManager *, base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState *> base/bind_internal.h:214:12 (base_unittests+0x000000cefea6) #13 MakeItSo<void (base::trace_event::MemoryDumpManager::*const &)(base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState *), base::trace_event::MemoryDumpManager *, base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState *> base/bind_internal.h:285 (base_unittests+0x000000cefea6) #14 RunImpl<void (base::trace_event::MemoryDumpManager::*const &)(base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState *), const std::__1::tuple<base::internal::UnretainedWrapper<base::trace_event::MemoryDumpManager>, base::internal::UnretainedWrapper<base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState> > &, 0, 1> base/bind_internal.h:361 (base_unittests+0x000000cefea6) #15 base::internal::Invoker<base::internal::BindState<void (base::trace_event::MemoryDumpManager::*)(base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState*), base::internal::UnretainedWrapper<base::trace_event::MemoryDumpManager>, base::internal::UnretainedWrapper<base::trace_event::MemoryDumpManager::ProcessMemoryDumpAsyncState> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (base_unittests+0x000000cefea6) #16 Run base/callback.h:64:12 (base_unittests+0x000000cd48ae) #17 base::SequencedWorkerPool::Inner::ThreadLoop(base::SequencedWorkerPool::Worker*) base/threading/sequenced_worker_pool.cc:1018 (base_unittests+0x000000cd48ae) #18 base::SequencedWorkerPool::Worker::Run() base/threading/sequenced_worker_pool.cc:611:25 (base_unittests+0x000000cd3ed1) #19 base::SimpleThread::ThreadMain() base/threading/simple_thread.cc:68:3 (base_unittests+0x000000cd9612) #20 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (base_unittests+0x000000cd318d) SUMMARY: ThreadSanitizer: data race base/threading/thread_local_storage.cc:299:9 in base::ThreadLocalStorage::StaticSlot::Free()
,
Oct 24 2016
Since this is causing a bot to be red please let me know if you have a solution in the works or if you would like to revert your patch.
,
Oct 24 2016
Fix in the CQ https://codereview.chromium.org/2447853002/
,
Oct 25 2016
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/42bdd9c57551be778bfda66453cb6054d78dfdac commit 42bdd9c57551be778bfda66453cb6054d78dfdac Author: fdoray <fdoray@chromium.org> Date: Tue Oct 25 02:46:00 2016 Use SequencedWorkerPoolOwner in MemoryDumpManagerTest. MemoryDumpManagerTest didn't join its thread. This made a write in TearDown() racy with a read from a thread created by the test. With this CL, threads created by MemoryDumpManagerTest are joined before TearDown() runs. BUG= 658766 Review-Url: https://codereview.chromium.org/2447853002 Cr-Commit-Position: refs/heads/master@{#427251} [modify] https://crrev.com/42bdd9c57551be778bfda66453cb6054d78dfdac/base/test/sequenced_worker_pool_owner.cc [modify] https://crrev.com/42bdd9c57551be778bfda66453cb6054d78dfdac/base/test/sequenced_worker_pool_owner.h [modify] https://crrev.com/42bdd9c57551be778bfda66453cb6054d78dfdac/base/trace_event/memory_dump_manager_unittest.cc
,
Oct 25 2016
|
|||
►
Sign in to add a comment |
|||
Comment 1 by danakj@chromium.org
, Oct 24 2016