[sequence_manager] Fix race in SequenceManagerPerfTest.
Tests involving TaskScheduler accessed the members of
SameThreadTaskSource from different threads without synchronization.
This CL fixes the issue by making sure that the initial invocation of
TestTask() happens on the same thread as other invocations.
TSAN report before this CL:
WARNING: ThreadSanitizer: data race (pid=126426)
Write of size 4 at 0x7b1400001c0c by thread T4:
#0 base::sequence_manager::SameThreadTaskSource::TestTask() base/task/sequence_manager/sequence_manager_perftest.cc:311:25
#1 Invoke<void (base::sequence_manager::SameThreadTaskSource::*)(), base::sequence_manager::SameThreadTaskSource *> base/bind_internal.h:516:12
#2 MakeItSo<void (base::sequence_manager::SameThreadTaskSource::*const &)(), base::sequence_manager::SameThreadTaskSource *> base/bind_internal.h:616
#3 RunImpl<void (base::sequence_manager::SameThreadTaskSource::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::sequence_manager::SameThreadTaskSource> > &, 0> base/bind_internal.h:689
#4 base::internal::Invoker<base::internal::BindState<void (base::sequence_manager::SameThreadTaskSource::*)(), base::internal::UnretainedWrapper<base::sequence_manager::SameThreadTaskSource> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:671
#5 Run base/callback.h:99:12
#6 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:99
#7 base::internal::TaskTracker::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) base/task/task_scheduler/task_tracker.cc:641:23
#8 base::internal::TaskTrackerPosix::RunOrSkipTask(base::internal::Task, base::internal::Sequence*, bool) base/task/task_scheduler/task_tracker_posix.cc:23:16
#9 base::internal::TaskTracker::RunAndPopNextTask(scoped_refptr<base::internal::Sequence>, base::internal::CanScheduleSequenceObserver*) base/task/task_scheduler/task_tracker.cc:496:3
#10 base::internal::SchedulerWorker::RunWorker() base/task/task_scheduler/scheduler_worker.cc:333:24
#11 base::internal::SchedulerWorker::RunSharedWorker() base/task/task_scheduler/scheduler_worker.cc:237:3
#12 base::internal::SchedulerWorker::ThreadMain() base/task/task_scheduler/scheduler_worker.cc:207:7
#13 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:81:13
Previous write of size 4 at 0x7b1400001c0c by main thread:
#0 TestTask base/task/sequence_manager/sequence_manager_perftest.cc:330:27
#1 base::sequence_manager::SameThreadTaskSource::Start() base/task/sequence_manager/sequence_manager_perftest.cc:297
#2 base::sequence_manager::SingleThreadImmediateTestCase::Start() base/task/sequence_manager/sequence_manager_perftest.cc:408:41
#3 base::sequence_manager::SequenceManagerPerfTest::Benchmark(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, base::sequence_manager::TestCase*) base/task/sequence_manager/sequence_manager_perftest.cc:636:15
#4 base::sequence_manager::SequenceManagerPerfTest_PostImmediateTasks_OneQueue_Test::TestBody() base/task/sequence_manager/sequence_manager_perftest.cc:714:3
#5 HandleExceptionsInMethodIfSupported<testing::Test, void> third_party/googletest/src/googletest/src/gtest.cc
#6 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2522
#7 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2703:11
#8 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2825:28
#9 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:5227:43
#10 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc
#11 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4835
#12 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2369:46
#13 base::TestSuite::Run() base/test/test_suite.cc:294
#14 main base/test/run_all_perftests.cc:8:42
TSAN report after this CL:
No races found.
Change-Id: I03b816a01fe33eed86966f89cb1ad1b9ab34c2e3
Reviewed-on: https://chromium-review.googlesource.com/c/1340534Reviewed-by:
Alex Clarke <alexclarke@chromium.org>
Commit-Queue: François Doray <fdoray@chromium.org>
Cr-Commit-Position: refs/heads/master@{#609276}
Showing
Please register or sign in to comment