New issue
Advanced search Search tips

Issue 750382 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Aug 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: ----
Pri: 2
Type: Bug



Sign in to add a comment

Race in ExtensionServiceTest.StorageQuota

Project Member Reported by gab@chromium.org, Jul 28 2017

Issue description

The 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

 
Project Member

Comment 1 by bugdroid1@chromium.org, Jul 29 2017

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

commit 73b3e2daaaceeb200833170eac45bb6e67ff83ef
Author: Gabriel Charette <gab@chromium.org>
Date: Sat Jul 29 03:34:36 2017

Revert "[TaskScheduler] Migrate some extension installer code to TaskScheduler."

This reverts commit 05dabf99bbe01112e7a78716869d762aa614ff9a.

Reason for revert: Data race  https://crbug.com/750382  for details

Original change's description:
> [TaskScheduler] Migrate some extension installer code to TaskScheduler.
> 
> Bug:  689520 
> Change-Id: I8743112968e261459d8aee5491e2280da1461661
> Reviewed-on: https://chromium-review.googlesource.com/585386
> Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org>
> Reviewed-by: Devlin <rdevlin.cronin@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#489747}

TBR=lazyboy@chromium.org,rdevlin.cronin@chromium.org

# Not skipping CQ checks because original CL landed > 1 day ago.

NOPRESUBMIT=True

Bug:  689520 ,  750382  
Change-Id: Ic7065c7ebbae93997f5008164d8c555d032d3150
Reviewed-on: https://chromium-review.googlesource.com/591935
Commit-Queue: Gabriel Charette <gab@chromium.org>
Reviewed-by: Gabriel Charette <gab@chromium.org>
Cr-Commit-Position: refs/heads/master@{#490607}
[modify] https://crrev.com/73b3e2daaaceeb200833170eac45bb6e67ff83ef/chrome/browser/extensions/unpacked_installer.cc
[modify] https://crrev.com/73b3e2daaaceeb200833170eac45bb6e67ff83ef/chrome/browser/extensions/user_script_listener_unittest.cc
[modify] https://crrev.com/73b3e2daaaceeb200833170eac45bb6e67ff83ef/chrome/browser/extensions/webstore_installer.cc
[modify] https://crrev.com/73b3e2daaaceeb200833170eac45bb6e67ff83ef/chrome/browser/extensions/zipfile_installer.cc
[modify] https://crrev.com/73b3e2daaaceeb200833170eac45bb6e67ff83ef/chrome/browser/extensions/zipfile_installer.h

Project Member

Comment 2 by bugdroid1@chromium.org, 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

Project Member

Comment 3 by bugdroid1@chromium.org, 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

Status: Fixed (was: Assigned)
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