New issue
Advanced search Search tips

Issue 717527 link

Starred by 0 users

Issue metadata

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



Sign in to add a comment

TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest.PostTasksBeforeStart fails on TSAN

Project Member Reported by vabr@chromium.org, May 2 2017

Issue description

Failing build: https://build.chromium.org/p/chromium.memory/builders/Linux%20TSan%20Tests/builds/5130

Sanitizer output is below. It confusingly contains "OK", but nevertheless also a warning with stack traces.

I'm assigning this to the test author, who introduced the test as part of  bug 690706 .


[ RUN      ] TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest.PostTasksBeforeStart
==================
WARNING: ThreadSanitizer: data race (pid=30304)
  Write of size 1 at 0x7b1400007df8 by main thread:
    #0 pthread_mutex_destroy <null> (base_unittests+0x4d252e)
    #1 base::internal::LockImpl::~LockImpl() base/synchronization/lock_impl_posix.cc:52:12 (base_unittests+0xea25f9)
    #2 ~Lock base/synchronization/lock.h:25:12 (base_unittests+0xea29d7)
    #3 ~WaitableEventKernel base/synchronization/waitable_event_posix.cc:379 (base_unittests+0xea29d7)
    #4 DeleteInternal base/memory/ref_counted.h:319 (base_unittests+0xea29d7)
    #5 Destruct base/memory/ref_counted.h:275 (base_unittests+0xea29d7)
    #6 Release base/memory/ref_counted.h:310 (base_unittests+0xea29d7)
    #7 Release base/memory/ref_counted.h:572 (base_unittests+0xea29d7)
    #8 ~scoped_refptr base/memory/ref_counted.h:473 (base_unittests+0xea29d7)
    #9 base::WaitableEvent::~WaitableEvent() base/synchronization/waitable_event_posix.cc:48 (base_unittests+0xea29d7)
    #10 base::internal::TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest_PostTasksBeforeStart_Test::TestBody() base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:454:1 (base_unittests+0xb644c8)
    #11 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8039d)
    #12 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0xf8039d)
    #13 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0xf80fcd)
    #14 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0xf81716)
    #15 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0xf8c386)
    #16 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8bcb4)
    #17 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0xf8bcb4)
    #18 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0xf3e327)
    #19 base::TestSuite::Run() base/test/test_suite.cc:271 (base_unittests+0xf3e327)
    #20 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0xf2ed65)
    #21 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0xf2ed65)
    #22 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0xf2ed65)
    #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+0xf2ed65)
    #24 Run base/callback.h:80:12 (base_unittests+0xf4d415)
    #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:211 (base_unittests+0xf4d415)
    #26 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (base_unittests+0xf4d29a)
    #27 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0xf2ecc0)

  Previous atomic read of size 1 at 0x7b1400007df8 by thread T20:
    #0 pthread_mutex_lock <null> (base_unittests+0x4e94fe)
    #1 base::internal::LockImpl::Lock() base/synchronization/lock_impl_posix.cc:64:12 (base_unittests+0xea2675)
    #2 Acquire base/synchronization/lock.h:26:26 (base_unittests+0xea3051)
    #3 base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) base/synchronization/waitable_event_posix.cc:214 (base_unittests+0xea3051)
    #4 base::WaitableEvent::Wait() base/synchronization/waitable_event_posix.cc:157:17 (base_unittests+0xea2dfb)
    #5 base::internal::(anonymous namespace)::TaskPostedBeforeStart(base::PlatformThreadRef*, base::WaitableEvent*, base::WaitableEvent*) base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:403:12 (base_unittests+0xb6453f)
    #6 Invoke<base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *> base/bind_internal.h:164:12 (base_unittests+0xb6e598)
    #7 MakeItSo<void (*const &)(base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *), base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *> base/bind_internal.h:285 (base_unittests+0xb6e598)
    #8 RunImpl<void (*const &)(base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *), const std::__1::tuple<base::internal::UnretainedWrapper<base::PlatformThreadRef>, base::internal::UnretainedWrapper<base::WaitableEvent>, base::internal::UnretainedWrapper<base::WaitableEvent> > &, 0, 1, 2> base/bind_internal.h:361 (base_unittests+0xb6e598)
    #9 base::internal::Invoker<base::internal::BindState<void (*)(base::PlatformThreadRef*, base::WaitableEvent*, base::WaitableEvent*), base::internal::UnretainedWrapper<base::PlatformThreadRef>, base::internal::UnretainedWrapper<base::WaitableEvent>, base::internal::UnretainedWrapper<base::WaitableEvent> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (base_unittests+0xb6e598)
    #10 Run base/callback.h:91:12 (base_unittests+0xe19cbc)
    #11 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (base_unittests+0xe19cbc)
    #12 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >) base/task_scheduler/task_tracker.cc:332:26 (base_unittests+0xeb5fbc)
    #13 base::internal::TaskTracker::RunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::SequenceToken const&) base/task_scheduler/task_tracker.cc:294:7 (base_unittests+0xeb59b1)
    #14 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:79:34 (base_unittests+0xeae3cc)
    #15 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (base_unittests+0xec5f6d)

  Location is heap block of size 80 at 0x7b1400007df0 allocated by main thread:
    #0 operator new(unsigned long) <null> (base_unittests+0x5305e2)
    #1 base::WaitableEvent::WaitableEvent(base::WaitableEvent::ResetPolicy, base::WaitableEvent::InitialState) base/synchronization/waitable_event_posix.cc:46:15 (base_unittests+0xea2826)
    #2 base::internal::TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest_PostTasksBeforeStart_Test::TestBody() base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:423:17 (base_unittests+0xb63cbe)
    #3 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8039d)
    #4 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0xf8039d)
    #5 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0xf80fcd)
    #6 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0xf81716)
    #7 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0xf8c386)
    #8 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8bcb4)
    #9 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0xf8bcb4)
    #10 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0xf3e327)
    #11 base::TestSuite::Run() base/test/test_suite.cc:271 (base_unittests+0xf3e327)
    #12 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0xf2ed65)
    #13 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0xf2ed65)
    #14 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0xf2ed65)
    #15 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+0xf2ed65)
    #16 Run base/callback.h:80:12 (base_unittests+0xf4d415)
    #17 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:211 (base_unittests+0xf4d415)
    #18 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (base_unittests+0xf4d29a)
    #19 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0xf2ecc0)

  Thread T20 'TaskSchedulerTe' (tid=30571, running) created by main thread at:
    #0 pthread_create <null> (base_unittests+0x4d1463)
    #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+0xec5a67)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (base_unittests+0xec5965)
    #3 Initialize base/task_scheduler/scheduler_worker.cc:142:5 (base_unittests+0xeae190)
    #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:30 (base_unittests+0xeae190)
    #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:324:15 (base_unittests+0xeadd16)
    #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:232:5 (base_unittests+0xeadc95)
    #7 base::internal::SchedulerWorkerPoolImpl::Start(base::SchedulerWorkerPoolParams const&) base/task_scheduler/scheduler_worker_pool_impl.cc:290:49 (base_unittests+0xeaf0e1)
    #8 base::internal::(anonymous namespace)::TaskSchedulerWorkerPoolImplTest::StartWorkerPool(base::TimeDelta, unsigned long) base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:93:19 (base_unittests+0xb645ba)
    #9 base::internal::TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest_PostTasksBeforeStart_Test::TestBody() base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:443:3 (base_unittests+0xb6433b)
    #10 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8039d)
    #11 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0xf8039d)
    #12 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0xf80fcd)
    #13 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0xf81716)
    #14 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0xf8c386)
    #15 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8bcb4)
    #16 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0xf8bcb4)
    #17 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0xf3e327)
    #18 base::TestSuite::Run() base/test/test_suite.cc:271 (base_unittests+0xf3e327)
    #19 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0xf2ed65)
    #20 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0xf2ed65)
    #21 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0xf2ed65)
    #22 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+0xf2ed65)
    #23 Run base/callback.h:80:12 (base_unittests+0xf4d415)
    #24 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:211 (base_unittests+0xf4d415)
    #25 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (base_unittests+0xf4d29a)
    #26 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0xf2ecc0)

SUMMARY: ThreadSanitizer: data race (/b/s/w/ir/out/Release/base_unittests+0x4d252e) in __interceptor_pthread_mutex_destroy
==================
==================
WARNING: ThreadSanitizer: data race (pid=30304)
  Write of size 8 at 0x7b1400007e30 by main thread:
    #0 operator delete(void*) <null> (base_unittests+0x53086d)
    #1 DeleteInternal base/memory/ref_counted.h:319:44 (base_unittests+0xea29e7)
    #2 Destruct base/memory/ref_counted.h:275 (base_unittests+0xea29e7)
    #3 Release base/memory/ref_counted.h:310 (base_unittests+0xea29e7)
    #4 Release base/memory/ref_counted.h:572 (base_unittests+0xea29e7)
    #5 ~scoped_refptr base/memory/ref_counted.h:473 (base_unittests+0xea29e7)
    #6 base::WaitableEvent::~WaitableEvent() base/synchronization/waitable_event_posix.cc:48 (base_unittests+0xea29e7)
    #7 base::internal::TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest_PostTasksBeforeStart_Test::TestBody() base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:454:1 (base_unittests+0xb644c8)
    #8 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8039d)
    #9 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0xf8039d)
    #10 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0xf80fcd)
    #11 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0xf81716)
    #12 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0xf8c386)
    #13 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8bcb4)
    #14 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0xf8bcb4)
    #15 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0xf3e327)
    #16 base::TestSuite::Run() base/test/test_suite.cc:271 (base_unittests+0xf3e327)
    #17 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0xf2ed65)
    #18 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0xf2ed65)
    #19 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0xf2ed65)
    #20 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+0xf2ed65)
    #21 Run base/callback.h:80:12 (base_unittests+0xf4d415)
    #22 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:211 (base_unittests+0xf4d415)
    #23 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (base_unittests+0xf4d29a)
    #24 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0xf2ecc0)

  Previous read of size 8 at 0x7b1400007e30 by thread T20 (mutexes: write M939698798089764344):
    #0 begin buildtools/third_party/libc++/trunk/include/list:530:32 (base_unittests+0xea306a)
    #1 begin buildtools/third_party/libc++/trunk/include/list:849 (base_unittests+0xea306a)
    #2 Dequeue base/synchronization/waitable_event_posix.cc:426 (base_unittests+0xea306a)
    #3 base::WaitableEvent::TimedWaitUntil(base::TimeTicks const&) base/synchronization/waitable_event_posix.cc:215 (base_unittests+0xea306a)
    #4 base::WaitableEvent::Wait() base/synchronization/waitable_event_posix.cc:157:17 (base_unittests+0xea2dfb)
    #5 base::internal::(anonymous namespace)::TaskPostedBeforeStart(base::PlatformThreadRef*, base::WaitableEvent*, base::WaitableEvent*) base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:403:12 (base_unittests+0xb6453f)
    #6 Invoke<base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *> base/bind_internal.h:164:12 (base_unittests+0xb6e598)
    #7 MakeItSo<void (*const &)(base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *), base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *> base/bind_internal.h:285 (base_unittests+0xb6e598)
    #8 RunImpl<void (*const &)(base::PlatformThreadRef *, base::WaitableEvent *, base::WaitableEvent *), const std::__1::tuple<base::internal::UnretainedWrapper<base::PlatformThreadRef>, base::internal::UnretainedWrapper<base::WaitableEvent>, base::internal::UnretainedWrapper<base::WaitableEvent> > &, 0, 1, 2> base/bind_internal.h:361 (base_unittests+0xb6e598)
    #9 base::internal::Invoker<base::internal::BindState<void (*)(base::PlatformThreadRef*, base::WaitableEvent*, base::WaitableEvent*), base::internal::UnretainedWrapper<base::PlatformThreadRef>, base::internal::UnretainedWrapper<base::WaitableEvent>, base::internal::UnretainedWrapper<base::WaitableEvent> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:339 (base_unittests+0xb6e598)
    #10 Run base/callback.h:91:12 (base_unittests+0xe19cbc)
    #11 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (base_unittests+0xe19cbc)
    #12 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >) base/task_scheduler/task_tracker.cc:332:26 (base_unittests+0xeb5fbc)
    #13 base::internal::TaskTracker::RunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::SequenceToken const&) base/task_scheduler/task_tracker.cc:294:7 (base_unittests+0xeb59b1)
    #14 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:79:34 (base_unittests+0xeae3cc)
    #15 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (base_unittests+0xec5f6d)

  Mutex M939698798089764344 is already destroyed.

  Thread T20 'TaskSchedulerTe' (tid=30571, running) created by main thread at:
    #0 pthread_create <null> (base_unittests+0x4d1463)
    #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+0xec5a67)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (base_unittests+0xec5965)
    #3 Initialize base/task_scheduler/scheduler_worker.cc:142:5 (base_unittests+0xeae190)
    #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:30 (base_unittests+0xeae190)
    #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:324:15 (base_unittests+0xeadd16)
    #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:232:5 (base_unittests+0xeadc95)
    #7 base::internal::SchedulerWorkerPoolImpl::Start(base::SchedulerWorkerPoolParams const&) base/task_scheduler/scheduler_worker_pool_impl.cc:290:49 (base_unittests+0xeaf0e1)
    #8 base::internal::(anonymous namespace)::TaskSchedulerWorkerPoolImplTest::StartWorkerPool(base::TimeDelta, unsigned long) base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:93:19 (base_unittests+0xb645ba)
    #9 base::internal::TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest_PostTasksBeforeStart_Test::TestBody() base/task_scheduler/scheduler_worker_pool_impl_unittest.cc:443:3 (base_unittests+0xb6433b)
    #10 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8039d)
    #11 testing::Test::Run() testing/gtest/src/gtest.cc:2474 (base_unittests+0xf8039d)
    #12 testing::TestInfo::Run() testing/gtest/src/gtest.cc:2656:11 (base_unittests+0xf80fcd)
    #13 testing::TestCase::Run() testing/gtest/src/gtest.cc:2774:28 (base_unittests+0xf81716)
    #14 testing::internal::UnitTestImpl::RunAllTests() testing/gtest/src/gtest.cc:4647:43 (base_unittests+0xf8c386)
    #15 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458:12 (base_unittests+0xf8bcb4)
    #16 testing::UnitTest::Run() testing/gtest/src/gtest.cc:4255 (base_unittests+0xf8bcb4)
    #17 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237:46 (base_unittests+0xf3e327)
    #18 base::TestSuite::Run() base/test/test_suite.cc:271 (base_unittests+0xf3e327)
    #19 Invoke<base::TestSuite *> base/bind_internal.h:214:12 (base_unittests+0xf2ed65)
    #20 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:285 (base_unittests+0xf2ed65)
    #21 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:361 (base_unittests+0xf2ed65)
    #22 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+0xf2ed65)
    #23 Run base/callback.h:80:12 (base_unittests+0xf4d415)
    #24 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:211 (base_unittests+0xf4d415)
    #25 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:453:10 (base_unittests+0xf4d29a)
    #26 main base/test/run_all_base_unittests.cc:22:10 (base_unittests+0xf2ecc0)

SUMMARY: ThreadSanitizer: data race (/b/s/w/ir/out/Release/base_unittests+0x53086d) in operator delete(void*)
==================
[       OK ] TaskSchedulerWorkerPoolImplPostTaskBeforeStartTest.PostTasksBeforeStart (150 ms)
 
Project Member

Comment 1 by bugdroid1@chromium.org, May 3 2017

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

commit 9888c32790d9934ce4a4446349c9a691536561cd
Author: fdoray <fdoray@chromium.org>
Date: Wed May 03 17:03:34 2017

Synchronize memory in TaskTracker::Flush().

To prevent races, make sure that code that runs after
TaskTracker::Flush() sees memory changed by all tasks it was waiting
for.

BUG= 717527 

Review-Url: https://codereview.chromium.org/2857613002
Cr-Commit-Position: refs/heads/master@{#469008}

[modify] https://crrev.com/9888c32790d9934ce4a4446349c9a691536561cd/base/task_scheduler/task_tracker.cc
[modify] https://crrev.com/9888c32790d9934ce4a4446349c9a691536561cd/base/task_scheduler/task_tracker.h

Comment 2 by fdoray@chromium.org, May 25 2017

Status: Fixed (was: Assigned)
No failure since the fix landed.

Sign in to add a comment