Race in ExtensionServiceTest.StorageQuota |
||
Issue descriptionThe race is two parallel calls to extensions::UnpackedInstaller::LoadWithFileAccess() and is caused by https://chromium-review.googlesource.com/c/585386/ [ RUN ] ExtensionServiceTest.StorageQuota ================== WARNING: ThreadSanitizer: data race (pid=19382) Read of size 8 at 0x00000eaa9470 by thread T8: #0 IsWhitelistedForTest extensions/common/features/simple_feature.cc:183:8 (unit_tests+0x5231a45) #1 extensions::SimpleFeature::GetManifestAvailability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int) const extensions/common/features/simple_feature.cc:582 (unit_tests+0x5231a45) #2 extensions::SimpleFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/simple_feature.cc:226:7 (unit_tests+0x523111a) #3 extensions::ComplexFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/complex_feature.cc:42:21 (unit_tests+0x522ca3a) #4 IsAvailableToManifest extensions/common/features/feature.h:116:12 (unit_tests+0x523a0e1) #5 extensions::Manifest::CanAccessKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:254 (unit_tests+0x523a0e1) #6 extensions::Manifest::CanAccessPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:242:10 (unit_tests+0x523a285) #7 extensions::Manifest::HasPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:180:10 (unit_tests+0x523a154) #8 extensions::ManifestHandlerRegistry::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:140:32 (unit_tests+0x523b2e7) #9 extensions::ManifestHandler::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:87:25 (unit_tests+0x523b215) #10 LoadSharedFeatures extensions/common/extension.cc:687:8 (unit_tests+0x520cfc9) #11 extensions::Extension::InitFromValue(int, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/extension.cc:542 (unit_tests+0x520cfc9) #12 extensions::Extension::Create(base::FilePath const&, extensions::Manifest::Location, base::DictionaryValue const&, int, 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> >*) extensions/common/extension.cc:140:19 (unit_tests+0x520c31c) #13 extensions::file_util::LoadExtension(base::FilePath const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:218:38 (unit_tests+0x52361dc) #14 extensions::file_util::LoadExtension(base::FilePath const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:201:10 (unit_tests+0x5236134) #15 extensions::UnpackedInstaller::LoadWithFileAccess(int) chrome/browser/extensions/unpacked_installer.cc:346:16 (unit_tests+0x7715e5b) #16 Invoke<scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:196:12 (unit_tests+0x77166f5) #17 MakeItSo<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:262 (unit_tests+0x77166f5) #18 RunImpl<void (extensions::UnpackedInstaller::*)(int), std::__1::tuple<scoped_refptr<extensions::UnpackedInstaller>, int>, 0, 1> base/bind_internal.h:338 (unit_tests+0x77166f5) #19 base::internal::Invoker<base::internal::BindState<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int>, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:303 (unit_tests+0x77166f5) #20 Run base/callback.h:91:12 (unit_tests+0x543716a) #21 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (unit_tests+0x543716a) #22 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker.cc:335:28 (unit_tests+0x54c61e0) #23 base::internal::TaskTrackerPosix::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker_posix.cc:22:16 (unit_tests+0x54c6919) #24 base::internal::TaskTracker::RunNextTask(base::internal::Sequence*) base/task_scheduler/task_tracker.cc:251:5 (unit_tests+0x54c5be2) #25 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:84:34 (unit_tests+0x5533cd4) #26 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (unit_tests+0x54d425d) Previous write of size 8 at 0x00000eaa9470 by thread T6: #0 IsWhitelistedForTest extensions/common/features/simple_feature.cc:184:32 (unit_tests+0x5231a9e) #1 extensions::SimpleFeature::GetManifestAvailability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int) const extensions/common/features/simple_feature.cc:582 (unit_tests+0x5231a9e) #2 extensions::SimpleFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/simple_feature.cc:226:7 (unit_tests+0x523111a) #3 extensions::ComplexFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/complex_feature.cc:42:21 (unit_tests+0x522ca3a) #4 IsAvailableToManifest extensions/common/features/feature.h:116:12 (unit_tests+0x523a0e1) #5 extensions::Manifest::CanAccessKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:254 (unit_tests+0x523a0e1) #6 extensions::Manifest::CanAccessPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:242:10 (unit_tests+0x523a285) #7 extensions::Manifest::HasPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:180:10 (unit_tests+0x523a154) #8 extensions::ManifestHandlerRegistry::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:140:32 (unit_tests+0x523b2e7) #9 extensions::ManifestHandler::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:87:25 (unit_tests+0x523b215) #10 LoadSharedFeatures extensions/common/extension.cc:687:8 (unit_tests+0x520cfc9) #11 extensions::Extension::InitFromValue(int, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/extension.cc:542 (unit_tests+0x520cfc9) #12 extensions::Extension::Create(base::FilePath const&, extensions::Manifest::Location, base::DictionaryValue const&, int, 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> >*) extensions/common/extension.cc:140:19 (unit_tests+0x520c31c) #13 extensions::file_util::LoadExtension(base::FilePath const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:218:38 (unit_tests+0x52361dc) #14 extensions::file_util::LoadExtension(base::FilePath const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:201:10 (unit_tests+0x5236134) #15 extensions::UnpackedInstaller::LoadWithFileAccess(int) chrome/browser/extensions/unpacked_installer.cc:346:16 (unit_tests+0x7715e5b) #16 Invoke<scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:196:12 (unit_tests+0x77166f5) #17 MakeItSo<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:262 (unit_tests+0x77166f5) #18 RunImpl<void (extensions::UnpackedInstaller::*)(int), std::__1::tuple<scoped_refptr<extensions::UnpackedInstaller>, int>, 0, 1> base/bind_internal.h:338 (unit_tests+0x77166f5) #19 base::internal::Invoker<base::internal::BindState<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int>, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:303 (unit_tests+0x77166f5) #20 Run base/callback.h:91:12 (unit_tests+0x543716a) #21 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (unit_tests+0x543716a) #22 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker.cc:335:28 (unit_tests+0x54c61e0) #23 base::internal::TaskTrackerPosix::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker_posix.cc:22:16 (unit_tests+0x54c6919) #24 base::internal::TaskTracker::RunNextTask(base::internal::Sequence*) base/task_scheduler/task_tracker.cc:251:5 (unit_tests+0x54c5be2) #25 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:84:34 (unit_tests+0x5533cd4) #26 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (unit_tests+0x54d425d) Location is global 'extensions::(anonymous namespace)::g_whitelisted_extension_id' of size 8 at 0x00000eaa9470 (unit_tests+0x00000eaa9470) Thread T8 'TaskSchedulerSc' (tid=19615, running) created by main thread at: #0 pthread_create <null> (unit_tests+0x5ece83) #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (unit_tests+0x54d3de7) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (unit_tests+0x54d3ce5) #3 Initialize base/task_scheduler/scheduler_worker.cc:144:5 (unit_tests+0x5533a90) #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:31 (unit_tests+0x5533a90) #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:328:15 (unit_tests+0x553365d) #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:236:5 (unit_tests+0x55335d5) #7 CreateRegisterAndStartSchedulerWorker base/task_scheduler/scheduler_worker_pool_impl.cc:635:11 (unit_tests+0x553552d) #8 base::internal::SchedulerWorkerPoolImpl::WakeUpOneWorker() base/task_scheduler/scheduler_worker_pool_impl.cc:582 (unit_tests+0x553552d) #9 base::internal::SchedulerWorkerPoolImpl::PostTaskWithSequenceNow(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, scoped_refptr<base::internal::Sequence>) base/task_scheduler/scheduler_worker_pool_impl.cc:342:5 (unit_tests+0x5535387) #10 base::internal::SchedulerWorkerPoolImpl::PostTaskWithSequence(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, scoped_refptr<base::internal::Sequence>) base/task_scheduler/scheduler_worker_pool_impl.cc:301:5 (unit_tests+0x55351c3) #11 base::internal::TaskSchedulerImpl::PostDelayedTaskWithTraits(tracked_objects::Location const&, base::TaskTraits const&, base::Callback<void (), (base::internal::CopyMode)0, (base::internal::RepeatMode)0>, base::TimeDelta) base/task_scheduler/task_scheduler_impl.cc:93:35 (unit_tests+0x54c4e41) #12 PostDelayedTaskWithTraits base/task_scheduler/post_task.cc:74:33 (unit_tests+0x54c1a23) #13 base::PostTaskWithTraits(tracked_objects::Location const&, base::TaskTraits const&, base::Callback<void (), (base::internal::CopyMode)0, (base::internal::RepeatMode)0>) base/task_scheduler/post_task.cc:65 (unit_tests+0x54c1a23) #14 extensions::UnpackedInstaller::Load(base::FilePath const&) chrome/browser/extensions/unpacked_installer.cc:138:3 (unit_tests+0x771442d) #15 ExtensionServiceTest_StorageQuota_Test::TestBody() chrome/browser/extensions/extension_service_unittest.cc:5706:53 (unit_tests+0x19b8667) #16 HandleExceptionsInMethodIfSupported<testing::Test, void> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x249f85d) #17 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2471 (unit_tests+0x249f85d) #18 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2653:11 (unit_tests+0x24a075d) #19 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2771:28 (unit_tests+0x24a0f96) #20 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4648:43 (unit_tests+0x24aa2d6) #21 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x24a9cd4) #22 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4256 (unit_tests+0x24a9cd4) #23 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (unit_tests+0x45abcb5) #24 base::TestSuite::Run() base/test/test_suite.cc:270 (unit_tests+0x45abcb5) #25 content::UnitTestTestSuite::Run() content/public/test/unittest_test_suite.cc:45:23 (unit_tests+0x4718171) #26 Invoke<content::UnitTestTestSuite *> base/bind_internal.h:196:12 (unit_tests+0x45a05c5) #27 MakeItSo<int (content::UnitTestTestSuite::*const &)(), content::UnitTestTestSuite *> base/bind_internal.h:262 (unit_tests+0x45a05c5) #28 RunImpl<int (content::UnitTestTestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<content::UnitTestTestSuite> > &, 0> base/bind_internal.h:338 (unit_tests+0x45a05c5) #29 base::internal::Invoker<base::internal::BindState<int (content::UnitTestTestSuite::*)(), base::internal::UnretainedWrapper<content::UnitTestTestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (unit_tests+0x45a05c5) #30 Run base/callback.h:80:12 (unit_tests+0x45ae1b6) #31 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned long, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:216 (unit_tests+0x45ae1b6) #32 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:462:10 (unit_tests+0x45ae033) #33 main chrome/test/base/run_all_unittests.cc:30:10 (unit_tests+0x45a04fd) Thread T6 'TaskSchedulerSc' (tid=19609, running) created by main thread at: #0 pthread_create <null> (unit_tests+0x5ece83) #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (unit_tests+0x54d3de7) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (unit_tests+0x54d3ce5) #3 Initialize base/task_scheduler/scheduler_worker.cc:144:5 (unit_tests+0x5533a90) #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:31 (unit_tests+0x5533a90) #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:328:15 (unit_tests+0x553365d) #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:236:5 (unit_tests+0x55335d5) #7 base::internal::SchedulerWorkerPoolImpl::Start(base::SchedulerWorkerPoolParams const&) base/task_scheduler/scheduler_worker_pool_impl.cc:259:49 (unit_tests+0x5534691) #8 base::internal::TaskSchedulerImpl::Start(base::TaskScheduler::InitParams const&) base/task_scheduler/task_scheduler_impl.cc:83:39 (unit_tests+0x54c4d36) #9 base::test::ScopedAsyncTaskScheduler::ScopedAsyncTaskScheduler() base/test/scoped_async_task_scheduler.cc:31:33 (unit_tests+0x45a340e) #10 MakeUnique<base::test::ScopedAsyncTaskScheduler> base/memory/ptr_util.h:56:33 (unit_tests+0x4714cae) #11 content::TestBrowserThreadBundle::CreateThreads() content/public/test/test_browser_thread_bundle.cc:147 (unit_tests+0x4714cae) #12 content::TestBrowserThreadBundle::Init() content/public/test/test_browser_thread_bundle.cc:133:5 (unit_tests+0x47146ff) #13 content::TestBrowserThreadBundle::TestBrowserThreadBundle(int) content/public/test/test_browser_thread_bundle.cc:29:3 (unit_tests+0x47144ec) #14 extensions::ExtensionServiceTestBase::ExtensionServiceTestBase() chrome/browser/extensions/extension_service_test_base.cc:84:7 (unit_tests+0x194842b) #15 extensions::ExtensionServiceTestWithInstall::ExtensionServiceTestWithInstall() chrome/browser/extensions/extension_service_test_with_install.cc:42:34 (unit_tests+0x194be41) #16 ExtensionServiceTest chrome/browser/extensions/extension_service_unittest.cc:540:3 (unit_tests+0x19e6f27) #17 ExtensionServiceTest_StorageQuota_Test chrome/browser/extensions/extension_service_unittest.cc:5689 (unit_tests+0x19e6f27) #18 testing::internal::TestFactoryImpl<ExtensionServiceTest_StorageQuota_Test>::CreateTest() third_party/googletest/src/googletest/include/gtest/internal/gtest-internal.h:484 (unit_tests+0x19e6f27) #19 HandleExceptionsInMethodIfSupported<testing::internal::TestFactoryBase, testing::Test *> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x24a06ba) #20 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2644 (unit_tests+0x24a06ba) #21 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2771:28 (unit_tests+0x24a0f96) #22 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4648:43 (unit_tests+0x24aa2d6) #23 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x24a9cd4) #24 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4256 (unit_tests+0x24a9cd4) #25 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (unit_tests+0x45abcb5) #26 base::TestSuite::Run() base/test/test_suite.cc:270 (unit_tests+0x45abcb5) #27 content::UnitTestTestSuite::Run() content/public/test/unittest_test_suite.cc:45:23 (unit_tests+0x4718171) #28 Invoke<content::UnitTestTestSuite *> base/bind_internal.h:196:12 (unit_tests+0x45a05c5) #29 MakeItSo<int (content::UnitTestTestSuite::*const &)(), content::UnitTestTestSuite *> base/bind_internal.h:262 (unit_tests+0x45a05c5) #30 RunImpl<int (content::UnitTestTestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<content::UnitTestTestSuite> > &, 0> base/bind_internal.h:338 (unit_tests+0x45a05c5) #31 base::internal::Invoker<base::internal::BindState<int (content::UnitTestTestSuite::*)(), base::internal::UnretainedWrapper<content::UnitTestTestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (unit_tests+0x45a05c5) #32 Run base/callback.h:80:12 (unit_tests+0x45ae1b6) #33 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned long, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:216 (unit_tests+0x45ae1b6) #34 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:462:10 (unit_tests+0x45ae033) #35 main chrome/test/base/run_all_unittests.cc:30:10 (unit_tests+0x45a04fd) SUMMARY: ThreadSanitizer: data race extensions/common/features/simple_feature.cc:183:8 in IsWhitelistedForTest ================== ================== WARNING: ThreadSanitizer: data race (pid=19382) Read of size 1 at 0x7b0800068b60 by thread T8: #0 __is_long buildtools/third_party/libc++/trunk/include/string:1224:39 (unit_tests+0x5231aad) #1 size buildtools/third_party/libc++/trunk/include/string:892 (unit_tests+0x5231aad) #2 empty buildtools/third_party/libc++/trunk/include/string:907 (unit_tests+0x5231aad) #3 IsWhitelistedForTest extensions/common/features/simple_feature.cc:188 (unit_tests+0x5231aad) #4 extensions::SimpleFeature::GetManifestAvailability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int) const extensions/common/features/simple_feature.cc:582 (unit_tests+0x5231aad) #5 extensions::SimpleFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/simple_feature.cc:226:7 (unit_tests+0x523111a) #6 extensions::ComplexFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/complex_feature.cc:42:21 (unit_tests+0x522ca3a) #7 IsAvailableToManifest extensions/common/features/feature.h:116:12 (unit_tests+0x523a0e1) #8 extensions::Manifest::CanAccessKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:254 (unit_tests+0x523a0e1) #9 extensions::Manifest::CanAccessPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:242:10 (unit_tests+0x523a285) #10 extensions::Manifest::HasPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:180:10 (unit_tests+0x523a154) #11 extensions::ManifestHandlerRegistry::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:140:32 (unit_tests+0x523b2e7) #12 extensions::ManifestHandler::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:87:25 (unit_tests+0x523b215) #13 LoadSharedFeatures extensions/common/extension.cc:687:8 (unit_tests+0x520cfc9) #14 extensions::Extension::InitFromValue(int, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/extension.cc:542 (unit_tests+0x520cfc9) #15 extensions::Extension::Create(base::FilePath const&, extensions::Manifest::Location, base::DictionaryValue const&, int, 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> >*) extensions/common/extension.cc:140:19 (unit_tests+0x520c31c) #16 extensions::file_util::LoadExtension(base::FilePath const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:218:38 (unit_tests+0x52361dc) #17 extensions::file_util::LoadExtension(base::FilePath const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:201:10 (unit_tests+0x5236134) #18 extensions::UnpackedInstaller::LoadWithFileAccess(int) chrome/browser/extensions/unpacked_installer.cc:346:16 (unit_tests+0x7715e5b) #19 Invoke<scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:196:12 (unit_tests+0x77166f5) #20 MakeItSo<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:262 (unit_tests+0x77166f5) #21 RunImpl<void (extensions::UnpackedInstaller::*)(int), std::__1::tuple<scoped_refptr<extensions::UnpackedInstaller>, int>, 0, 1> base/bind_internal.h:338 (unit_tests+0x77166f5) #22 base::internal::Invoker<base::internal::BindState<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int>, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:303 (unit_tests+0x77166f5) #23 Run base/callback.h:91:12 (unit_tests+0x543716a) #24 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (unit_tests+0x543716a) #25 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker.cc:335:28 (unit_tests+0x54c61e0) #26 base::internal::TaskTrackerPosix::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker_posix.cc:22:16 (unit_tests+0x54c6919) #27 base::internal::TaskTracker::RunNextTask(base::internal::Sequence*) base/task_scheduler/task_tracker.cc:251:5 (unit_tests+0x54c5be2) #28 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:84:34 (unit_tests+0x5533cd4) #29 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (unit_tests+0x54d425d) Previous write of size 8 at 0x7b0800068b60 by thread T6: #0 operator new(unsigned long) <null> (unit_tests+0x651589) #1 IsWhitelistedForTest extensions/common/features/simple_feature.cc:184:34 (unit_tests+0x5231a5b) #2 extensions::SimpleFeature::GetManifestAvailability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int) const extensions/common/features/simple_feature.cc:582 (unit_tests+0x5231a5b) #3 extensions::SimpleFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/simple_feature.cc:226:7 (unit_tests+0x523111a) #4 extensions::ComplexFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/complex_feature.cc:42:21 (unit_tests+0x522ca3a) #5 IsAvailableToManifest extensions/common/features/feature.h:116:12 (unit_tests+0x523a0e1) #6 extensions::Manifest::CanAccessKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:254 (unit_tests+0x523a0e1) #7 extensions::Manifest::CanAccessPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:242:10 (unit_tests+0x523a285) #8 extensions::Manifest::HasPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:180:10 (unit_tests+0x523a154) #9 extensions::ManifestHandlerRegistry::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:140:32 (unit_tests+0x523b2e7) #10 extensions::ManifestHandler::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:87:25 (unit_tests+0x523b215) #11 LoadSharedFeatures extensions/common/extension.cc:687:8 (unit_tests+0x520cfc9) #12 extensions::Extension::InitFromValue(int, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/extension.cc:542 (unit_tests+0x520cfc9) #13 extensions::Extension::Create(base::FilePath const&, extensions::Manifest::Location, base::DictionaryValue const&, int, 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> >*) extensions/common/extension.cc:140:19 (unit_tests+0x520c31c) #14 extensions::file_util::LoadExtension(base::FilePath const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:218:38 (unit_tests+0x52361dc) #15 extensions::file_util::LoadExtension(base::FilePath const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:201:10 (unit_tests+0x5236134) #16 extensions::UnpackedInstaller::LoadWithFileAccess(int) chrome/browser/extensions/unpacked_installer.cc:346:16 (unit_tests+0x7715e5b) #17 Invoke<scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:196:12 (unit_tests+0x77166f5) #18 MakeItSo<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:262 (unit_tests+0x77166f5) #19 RunImpl<void (extensions::UnpackedInstaller::*)(int), std::__1::tuple<scoped_refptr<extensions::UnpackedInstaller>, int>, 0, 1> base/bind_internal.h:338 (unit_tests+0x77166f5) #20 base::internal::Invoker<base::internal::BindState<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int>, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:303 (unit_tests+0x77166f5) #21 Run base/callback.h:91:12 (unit_tests+0x543716a) #22 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (unit_tests+0x543716a) #23 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker.cc:335:28 (unit_tests+0x54c61e0) #24 base::internal::TaskTrackerPosix::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker_posix.cc:22:16 (unit_tests+0x54c6919) #25 base::internal::TaskTracker::RunNextTask(base::internal::Sequence*) base/task_scheduler/task_tracker.cc:251:5 (unit_tests+0x54c5be2) #26 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:84:34 (unit_tests+0x5533cd4) #27 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (unit_tests+0x54d425d) Location is heap block of size 24 at 0x7b0800068b60 allocated by thread T6: #0 operator new(unsigned long) <null> (unit_tests+0x651589) #1 IsWhitelistedForTest extensions/common/features/simple_feature.cc:184:34 (unit_tests+0x5231a5b) #2 extensions::SimpleFeature::GetManifestAvailability(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int) const extensions/common/features/simple_feature.cc:582 (unit_tests+0x5231a5b) #3 extensions::SimpleFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/simple_feature.cc:226:7 (unit_tests+0x523111a) #4 extensions::ComplexFeature::IsAvailableToManifest(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Type, extensions::Manifest::Location, int, extensions::Feature::Platform) const extensions/common/features/complex_feature.cc:42:21 (unit_tests+0x522ca3a) #5 IsAvailableToManifest extensions/common/features/feature.h:116:12 (unit_tests+0x523a0e1) #6 extensions::Manifest::CanAccessKey(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:254 (unit_tests+0x523a0e1) #7 extensions::Manifest::CanAccessPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:242:10 (unit_tests+0x523a285) #8 extensions::Manifest::HasPath(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&) const extensions/common/manifest.cc:180:10 (unit_tests+0x523a154) #9 extensions::ManifestHandlerRegistry::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:140:32 (unit_tests+0x523b2e7) #10 extensions::ManifestHandler::ParseExtension(extensions::Extension*, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/manifest_handler.cc:87:25 (unit_tests+0x523b215) #11 LoadSharedFeatures extensions/common/extension.cc:687:8 (unit_tests+0x520cfc9) #12 extensions::Extension::InitFromValue(int, std::__1::basic_string<unsigned short, base::string16_char_traits, std::__1::allocator<unsigned short> >*) extensions/common/extension.cc:542 (unit_tests+0x520cfc9) #13 extensions::Extension::Create(base::FilePath const&, extensions::Manifest::Location, base::DictionaryValue const&, int, 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> >*) extensions/common/extension.cc:140:19 (unit_tests+0x520c31c) #14 extensions::file_util::LoadExtension(base::FilePath const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:218:38 (unit_tests+0x52361dc) #15 extensions::file_util::LoadExtension(base::FilePath const&, extensions::Manifest::Location, int, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >*) extensions/common/file_util.cc:201:10 (unit_tests+0x5236134) #16 extensions::UnpackedInstaller::LoadWithFileAccess(int) chrome/browser/extensions/unpacked_installer.cc:346:16 (unit_tests+0x7715e5b) #17 Invoke<scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:196:12 (unit_tests+0x77166f5) #18 MakeItSo<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int> base/bind_internal.h:262 (unit_tests+0x77166f5) #19 RunImpl<void (extensions::UnpackedInstaller::*)(int), std::__1::tuple<scoped_refptr<extensions::UnpackedInstaller>, int>, 0, 1> base/bind_internal.h:338 (unit_tests+0x77166f5) #20 base::internal::Invoker<base::internal::BindState<void (extensions::UnpackedInstaller::*)(int), scoped_refptr<extensions::UnpackedInstaller>, int>, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:303 (unit_tests+0x77166f5) #21 Run base/callback.h:91:12 (unit_tests+0x543716a) #22 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (unit_tests+0x543716a) #23 base::internal::TaskTracker::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker.cc:335:28 (unit_tests+0x54c61e0) #24 base::internal::TaskTrackerPosix::PerformRunTask(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, base::internal::Sequence*) base/task_scheduler/task_tracker_posix.cc:22:16 (unit_tests+0x54c6919) #25 base::internal::TaskTracker::RunNextTask(base::internal::Sequence*) base/task_scheduler/task_tracker.cc:251:5 (unit_tests+0x54c5be2) #26 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:84:34 (unit_tests+0x5533cd4) #27 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (unit_tests+0x54d425d) Thread T8 'TaskSchedulerSc' (tid=19615, running) created by main thread at: #0 pthread_create <null> (unit_tests+0x5ece83) #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (unit_tests+0x54d3de7) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (unit_tests+0x54d3ce5) #3 Initialize base/task_scheduler/scheduler_worker.cc:144:5 (unit_tests+0x5533a90) #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:31 (unit_tests+0x5533a90) #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:328:15 (unit_tests+0x553365d) #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:236:5 (unit_tests+0x55335d5) #7 CreateRegisterAndStartSchedulerWorker base/task_scheduler/scheduler_worker_pool_impl.cc:635:11 (unit_tests+0x553552d) #8 base::internal::SchedulerWorkerPoolImpl::WakeUpOneWorker() base/task_scheduler/scheduler_worker_pool_impl.cc:582 (unit_tests+0x553552d) #9 base::internal::SchedulerWorkerPoolImpl::PostTaskWithSequenceNow(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, scoped_refptr<base::internal::Sequence>) base/task_scheduler/scheduler_worker_pool_impl.cc:342:5 (unit_tests+0x5535387) #10 base::internal::SchedulerWorkerPoolImpl::PostTaskWithSequence(std::__1::unique_ptr<base::internal::Task, std::__1::default_delete<base::internal::Task> >, scoped_refptr<base::internal::Sequence>) base/task_scheduler/scheduler_worker_pool_impl.cc:301:5 (unit_tests+0x55351c3) #11 base::internal::TaskSchedulerImpl::PostDelayedTaskWithTraits(tracked_objects::Location const&, base::TaskTraits const&, base::Callback<void (), (base::internal::CopyMode)0, (base::internal::RepeatMode)0>, base::TimeDelta) base/task_scheduler/task_scheduler_impl.cc:93:35 (unit_tests+0x54c4e41) #12 PostDelayedTaskWithTraits base/task_scheduler/post_task.cc:74:33 (unit_tests+0x54c1a23) #13 base::PostTaskWithTraits(tracked_objects::Location const&, base::TaskTraits const&, base::Callback<void (), (base::internal::CopyMode)0, (base::internal::RepeatMode)0>) base/task_scheduler/post_task.cc:65 (unit_tests+0x54c1a23) #14 extensions::UnpackedInstaller::Load(base::FilePath const&) chrome/browser/extensions/unpacked_installer.cc:138:3 (unit_tests+0x771442d) #15 ExtensionServiceTest_StorageQuota_Test::TestBody() chrome/browser/extensions/extension_service_unittest.cc:5706:53 (unit_tests+0x19b8667) #16 HandleExceptionsInMethodIfSupported<testing::Test, void> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x249f85d) #17 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2471 (unit_tests+0x249f85d) #18 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2653:11 (unit_tests+0x24a075d) #19 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2771:28 (unit_tests+0x24a0f96) #20 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4648:43 (unit_tests+0x24aa2d6) #21 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x24a9cd4) #22 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4256 (unit_tests+0x24a9cd4) #23 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (unit_tests+0x45abcb5) #24 base::TestSuite::Run() base/test/test_suite.cc:270 (unit_tests+0x45abcb5) #25 content::UnitTestTestSuite::Run() content/public/test/unittest_test_suite.cc:45:23 (unit_tests+0x4718171) #26 Invoke<content::UnitTestTestSuite *> base/bind_internal.h:196:12 (unit_tests+0x45a05c5) #27 MakeItSo<int (content::UnitTestTestSuite::*const &)(), content::UnitTestTestSuite *> base/bind_internal.h:262 (unit_tests+0x45a05c5) #28 RunImpl<int (content::UnitTestTestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<content::UnitTestTestSuite> > &, 0> base/bind_internal.h:338 (unit_tests+0x45a05c5) #29 base::internal::Invoker<base::internal::BindState<int (content::UnitTestTestSuite::*)(), base::internal::UnretainedWrapper<content::UnitTestTestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (unit_tests+0x45a05c5) #30 Run base/callback.h:80:12 (unit_tests+0x45ae1b6) #31 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned long, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:216 (unit_tests+0x45ae1b6) #32 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:462:10 (unit_tests+0x45ae033) #33 main chrome/test/base/run_all_unittests.cc:30:10 (unit_tests+0x45a04fd) Thread T6 'TaskSchedulerSc' (tid=19609, running) created by main thread at: #0 pthread_create <null> (unit_tests+0x5ece83) #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (unit_tests+0x54d3de7) #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (unit_tests+0x54d3ce5) #3 Initialize base/task_scheduler/scheduler_worker.cc:144:5 (unit_tests+0x5533a90) #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:31 (unit_tests+0x5533a90) #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:328:15 (unit_tests+0x553365d) #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:236:5 (unit_tests+0x55335d5) #7 base::internal::SchedulerWorkerPoolImpl::Start(base::SchedulerWorkerPoolParams const&) base/task_scheduler/scheduler_worker_pool_impl.cc:259:49 (unit_tests+0x5534691) #8 base::internal::TaskSchedulerImpl::Start(base::TaskScheduler::InitParams const&) base/task_scheduler/task_scheduler_impl.cc:83:39 (unit_tests+0x54c4d36) #9 base::test::ScopedAsyncTaskScheduler::ScopedAsyncTaskScheduler() base/test/scoped_async_task_scheduler.cc:31:33 (unit_tests+0x45a340e) #10 MakeUnique<base::test::ScopedAsyncTaskScheduler> base/memory/ptr_util.h:56:33 (unit_tests+0x4714cae) #11 content::TestBrowserThreadBundle::CreateThreads() content/public/test/test_browser_thread_bundle.cc:147 (unit_tests+0x4714cae) #12 content::TestBrowserThreadBundle::Init() content/public/test/test_browser_thread_bundle.cc:133:5 (unit_tests+0x47146ff) #13 content::TestBrowserThreadBundle::TestBrowserThreadBundle(int) content/public/test/test_browser_thread_bundle.cc:29:3 (unit_tests+0x47144ec) #14 extensions::ExtensionServiceTestBase::ExtensionServiceTestBase() chrome/browser/extensions/extension_service_test_base.cc:84:7 (unit_tests+0x194842b) #15 extensions::ExtensionServiceTestWithInstall::ExtensionServiceTestWithInstall() chrome/browser/extensions/extension_service_test_with_install.cc:42:34 (unit_tests+0x194be41) #16 ExtensionServiceTest chrome/browser/extensions/extension_service_unittest.cc:540:3 (unit_tests+0x19e6f27) #17 ExtensionServiceTest_StorageQuota_Test chrome/browser/extensions/extension_service_unittest.cc:5689 (unit_tests+0x19e6f27) #18 testing::internal::TestFactoryImpl<ExtensionServiceTest_StorageQuota_Test>::CreateTest() third_party/googletest/src/googletest/include/gtest/internal/gtest-internal.h:484 (unit_tests+0x19e6f27) #19 HandleExceptionsInMethodIfSupported<testing::internal::TestFactoryBase, testing::Test *> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x24a06ba) #20 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2644 (unit_tests+0x24a06ba) #21 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2771:28 (unit_tests+0x24a0f96) #22 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4648:43 (unit_tests+0x24aa2d6) #23 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (unit_tests+0x24a9cd4) #24 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4256 (unit_tests+0x24a9cd4) #25 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (unit_tests+0x45abcb5) #26 base::TestSuite::Run() base/test/test_suite.cc:270 (unit_tests+0x45abcb5) #27 content::UnitTestTestSuite::Run() content/public/test/unittest_test_suite.cc:45:23 (unit_tests+0x4718171) #28 Invoke<content::UnitTestTestSuite *> base/bind_internal.h:196:12 (unit_tests+0x45a05c5) #29 MakeItSo<int (content::UnitTestTestSuite::*const &)(), content::UnitTestTestSuite *> base/bind_internal.h:262 (unit_tests+0x45a05c5) #30 RunImpl<int (content::UnitTestTestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<content::UnitTestTestSuite> > &, 0> base/bind_internal.h:338 (unit_tests+0x45a05c5) #31 base::internal::Invoker<base::internal::BindState<int (content::UnitTestTestSuite::*)(), base::internal::UnretainedWrapper<content::UnitTestTestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (unit_tests+0x45a05c5) #32 Run base/callback.h:80:12 (unit_tests+0x45ae1b6) #33 base::(anonymous namespace)::LaunchUnitTestsInternal(base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&, unsigned long, int, bool, base::Callback<void (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:216 (unit_tests+0x45ae1b6) #34 base::LaunchUnitTests(int, char**, base::Callback<int (), (base::internal::CopyMode)1, (base::internal::RepeatMode)1> const&) base/test/launcher/unit_test_launcher.cc:462:10 (unit_tests+0x45ae033) #35 main chrome/test/base/run_all_unittests.cc:30:10 (unit_tests+0x45a04fd) SUMMARY: ThreadSanitizer: data race buildtools/third_party/libc++/trunk/include/string:1224:39 in __is_long
,
Aug 5 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/b22f239691286a33960ca46a4d346c12878dab06 commit b22f239691286a33960ca46a4d346c12878dab06 Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Sat Aug 05 03:34:48 2017 [SimpleFeature] Fix a race in whitelisted extension id global init. Using bare pointer to store an extension_id isn't thread-safe, and can lead to data races. A TSAN repro was found while moving extension installer code to Sequences (https://chromium-review.googlesource.com/c/585386, crbug.com/750382 ) Instead, use a LazyInstance to do the same, LazyInstance creation is thread-safe. However, ScopedWhitelistForTest is not thread-safe as it assigns extension_id. This is not a big deal as it is invoked explicity from test code. Rename the class to ScopedThreadUnsafeWhitelistForTest to hint that. Bug: 751882 Bug: 750382 Change-Id: I5d2301004e5ff295cb3bd05b4c164262c8caf99b Reviewed-on: https://chromium-review.googlesource.com/599240 Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Cr-Commit-Position: refs/heads/master@{#492226} [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/chrome/browser/extensions/permission_message_combinations_unittest.cc [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/chrome/common/extensions/manifest_tests/extension_manifests_initvalue_unittest.cc [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/chrome/common/extensions/manifest_tests/extension_manifests_launcher_page_unittest.cc [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/chrome/common/extensions/manifest_tests/extension_manifests_platformapp_unittest.cc [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/chrome/common/extensions/sync_type_unittest.cc [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/extensions/common/features/simple_feature.cc [modify] https://crrev.com/b22f239691286a33960ca46a4d346c12878dab06/extensions/common/features/simple_feature.h
,
Aug 9 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/81ff01ee027beef0b387aa9dae51b9a4c11540a8 commit 81ff01ee027beef0b387aa9dae51b9a4c11540a8 Author: Istiaque Ahmed <lazyboy@chromium.org> Date: Wed Aug 09 16:00:59 2017 [Reland] [TaskScheduler] Migrate some extension installer code to TaskScheduler. The original race was due to an orthogal issue that was fixed in https://chromium-review.googlesource.com/c/599240 Use ExtensionFileTaskRunner to make sure there are no possibilities around accessing installing extensions' resources. Unfortunately, this also means we no longer run in USER_BLOCKING priority for these tasks. ExtensionFileTaskRunner runs in USER_VISIBLE priority. Bug: 750382 Bug: 751882 Change-Id: Ia85904d81949e6194827477199243ab5b56ccb6f Reviewed-on: https://chromium-review.googlesource.com/607534 Reviewed-by: Devlin <rdevlin.cronin@chromium.org> Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Cr-Commit-Position: refs/heads/master@{#493004} [modify] https://crrev.com/81ff01ee027beef0b387aa9dae51b9a4c11540a8/chrome/browser/extensions/unpacked_installer.cc [modify] https://crrev.com/81ff01ee027beef0b387aa9dae51b9a4c11540a8/chrome/browser/extensions/user_script_listener_unittest.cc [modify] https://crrev.com/81ff01ee027beef0b387aa9dae51b9a4c11540a8/chrome/browser/extensions/webstore_installer.cc [modify] https://crrev.com/81ff01ee027beef0b387aa9dae51b9a4c11540a8/chrome/browser/extensions/zipfile_installer.cc [modify] https://crrev.com/81ff01ee027beef0b387aa9dae51b9a4c11540a8/chrome/browser/extensions/zipfile_installer.h
,
Aug 9 2017
b22f239691286a33960ca46a4d346c12878dab06 is the fix for the race. The revert was relanded as 81ff01ee027beef0b387aa9dae51b9a4c11540a8 just now which shouldn't exhibit any data race. |
||
►
Sign in to add a comment |
||
Comment 1 by bugdroid1@chromium.org
, Jul 29 2017