New issue
Advanced search Search tips
Note: Color blocks (like or ) mean that a user may not be available. Tooltip shows the reason.

Issue 749328 link

Starred by 1 user

Issue metadata

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

Blocking:
issue 368525



Sign in to add a comment

Data race in persistent memory allocator

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

Issue description

Caught in an attempt to enable browser_tests on TSAN bots. 

I think the issue is lazy allocating without synchronization in PersistentHistogramAllocator::AllocateHistogram():

    PersistentMemoryAllocator::Reference ranges_ref =
        bucket_ranges->persistent_reference();
    if (!ranges_ref) {
      size_t ranges_count = bucket_count + 1;
      size_t ranges_bytes = ranges_count * sizeof(HistogramBase::Sample);
      ranges_ref =
          memory_allocator_->Allocate(ranges_bytes, kTypeIdRangesArray);

this code can be called by multiple unsynchronized callers.

Full log below:

WARNING: ThreadSanitizer: data race (pid=25116)
  Read of size 4 at 0x7fd05740d63c by thread T24:
    #0 GetBlock base/metrics/persistent_memory_allocator.cc:865:16 (browser_tests+0x420fd0a)
    #1 base::PersistentMemoryAllocator::GetType(unsigned int) const base/metrics/persistent_memory_allocator.cc:540 (browser_tests+0x420fd0a)
    #2 base::PersistentHistogramAllocator::AllocateHistogram(base::HistogramType, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int, base::BucketRanges const*, int, unsigned int*) base/metrics/persistent_histogram_allocator.cc:383:7 (browser_tests+0x420b448)
    #3 base::Histogram::Factory::Build() base/metrics/histogram.cc:186:40 (browser_tests+0x4200db4)
    #4 base::Histogram::FactoryGet(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int, unsigned int, int) base/metrics/histogram.cc:253:63 (browser_tests+0x4201242)
    #5 base::Histogram::FactoryGet(char const*, int, int, unsigned int, int) base/metrics/histogram.cc:271:10 (browser_tests+0x420195c)
    #6 net::NetworkQualityEstimator::OnPrefsRead(std::__1::map<net::nqe::internal::NetworkID, net::nqe::internal::CachedNetworkQuality, std::__1::less<net::nqe::internal::NetworkID>, std::__1::allocator<std::__1::pair<net::nqe::internal::NetworkID const, net::nqe::internal::CachedNetworkQuality> > >) net/nqe/network_quality_estimator.cc:1753:3 (browser_tests+0x4fb7387)
    #7 net::NetworkQualitiesPrefsManager::InitializeOnNetworkThread(net::NetworkQualityEstimator*) net/nqe/network_qualities_prefs_manager.cc:96:31 (browser_tests+0x4fa8526)
    #8 (anonymous namespace)::SetNQEOnIOThread(net::NetworkQualitiesPrefsManager*, IOThread*) chrome/browser/net/nqe/ui_network_quality_estimator_service.cc:75:18 (browser_tests+0x443ea22)
    #9 Invoke<net::NetworkQualitiesPrefsManager *, IOThread *> base/bind_internal.h:151:12 (browser_tests+0x44426f9)
    #10 MakeItSo<void (*)(net::NetworkQualitiesPrefsManager *, IOThread *), net::NetworkQualitiesPrefsManager *, IOThread *> base/bind_internal.h:262 (browser_tests+0x44426f9)
    #11 RunImpl<void (*)(net::NetworkQualitiesPrefsManager *, IOThread *), std::__1::tuple<net::NetworkQualitiesPrefsManager *, IOThread *>, 0, 1> base/bind_internal.h:338 (browser_tests+0x44426f9)
    #12 base::internal::Invoker<base::internal::BindState<void (*)(net::NetworkQualitiesPrefsManager*, IOThread*), net::NetworkQualitiesPrefsManager*, IOThread*>, void ()>::RunOnce(base::internal::BindStateBase*) base/bind_internal.h:303 (browser_tests+0x44426f9)
    #13 Run base/callback.h:91:12 (browser_tests+0x41b5b3a)
    #14 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (browser_tests+0x41b5b3a)
    #15 base::MessageLoop::RunTask(base::PendingTask*) base/message_loop/message_loop.cc:422:19 (browser_tests+0x41ed9bf)
    #16 base::MessageLoop::DeferOrRunPendingTask(base::PendingTask) base/message_loop/message_loop.cc:433:5 (browser_tests+0x41edeab)
    #17 base::MessageLoop::DoWork() base/message_loop/message_loop.cc:540:13 (browser_tests+0x41ee35b)
    #18 base::MessagePumpLibevent::Run(base::MessagePump::Delegate*) base/message_loop/message_pump_libevent.cc:220:31 (browser_tests+0x41f41d0)
    #19 base::MessageLoop::Run() base/message_loop/message_loop.cc:369:10 (browser_tests+0x41ed333)
    #20 non-virtual thunk to base::MessageLoop::Run() base/message_loop/message_loop.cc (browser_tests+0x41ed37d)
    #21 base::RunLoop::Run() base/run_loop.cc:112:14 (browser_tests+0x4235ed4)
    #22 base::Thread::Run(base::RunLoop*) base/threading/thread.cc:255:13 (browser_tests+0x427e2cb)
    #23 content::BrowserThreadImpl::IOThreadRun(base::RunLoop*) content/browser/browser_thread_impl.cc:278:11 (browser_tests+0x235979f)
    #24 content::BrowserThreadImpl::Run(base::RunLoop*) content/browser/browser_thread_impl.cc:313:14 (browser_tests+0x2359a14)
    #25 base::Thread::ThreadMain() base/threading/thread.cc:338:3 (browser_tests+0x427ea61)
    #26 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (browser_tests+0x42725a8)
  Previous write of size 4 at 0x7fd05740d63c by thread T19 (mutexes: write M125110181129911200):
    #0 base::PersistentMemoryAllocator::AllocateImpl(unsigned long, unsigned int) base/metrics/persistent_memory_allocator.cc:732:19 (browser_tests+0x42104ef)
    #1 base::PersistentMemoryAllocator::Allocate(unsigned long, unsigned int) base/metrics/persistent_memory_allocator.cc:609:19 (browser_tests+0x420f169)
    #2 base::PersistentHistogramAllocator::AllocateHistogram(base::HistogramType, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int, base::BucketRanges const*, int, unsigned int*) base/metrics/persistent_histogram_allocator.cc:367:30 (browser_tests+0x420b476)
    #3 base::Histogram::Factory::Build() base/metrics/histogram.cc:186:40 (browser_tests+0x4200db4)
    #4 base::Histogram::FactoryGet(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, int, int, unsigned int, int) base/metrics/histogram.cc:253:63 (browser_tests+0x4201242)
    #5 base::Histogram::FactoryGet(char const*, int, int, unsigned int, int) base/metrics/histogram.cc:271:10 (browser_tests+0x420195c)
    #6 sql::(anonymous namespace)::Read(sqlite3_file*, void*, int, long long) sql/vfs_wrapper.cc:121:3 (browser_tests+0x6bd8a73)
    #7 sqlite3OsRead third_party/sqlite/amalgamation/sqlite3.c:20727:10 (browser_tests+0x6c147ea)
    #8 sqlite3PagerReadFileheader third_party/sqlite/amalgamation/sqlite3.c:51395 (browser_tests+0x6c147ea)
    #9 sqlite3BtreeOpen third_party/sqlite/amalgamation/sqlite3.c:61996 (browser_tests+0x6c147ea)
    #10 openDatabase third_party/sqlite/amalgamation/sqlite3.c:144719:8 (browser_tests+0x6c06478)
    #11 sqlite3_open_v2 third_party/sqlite/amalgamation/sqlite3.c:144910:10 (browser_tests+0x6c074e0)
    #12 sql::Connection::OpenInternal(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, sql::Connection::Retry) sql/connection.cc:1708:13 (browser_tests+0x6bcb08f)
    #13 sql::Connection::Open(base::FilePath const&) sql/connection.cc:411:10 (browser_tests+0x6bcacd5)
    #14 WebDatabase::Init(base::FilePath const&) components/webdata/common/web_database.cc:92:12 (browser_tests+0x729a13a)
    #15 WebDatabaseBackend::LoadDatabaseIfNecessary() components/webdata/common/web_database_backend.cc:110:23 (browser_tests+0x729e60c)
    #16 WebDatabaseBackend::InitDatabase() components/webdata/common/web_database_backend.cc:38:3 (browser_tests+0x729e36d)
    #17 Invoke<const scoped_refptr<WebDatabaseBackend> &> base/bind_internal.h:196:12 (browser_tests+0x729c586)
    #18 MakeItSo<void (WebDatabaseBackend::*const &)(), const scoped_refptr<WebDatabaseBackend> &> base/bind_internal.h:262 (browser_tests+0x729c586)
    #19 RunImpl<void (WebDatabaseBackend::*const &)(), const std::__1::tuple<scoped_refptr<WebDatabaseBackend> > &, 0> base/bind_internal.h:338 (browser_tests+0x729c586)
    #20 base::internal::Invoker<base::internal::BindState<void (WebDatabaseBackend::*)(), scoped_refptr<WebDatabaseBackend> >, void ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (browser_tests+0x729c586)
    #21 Run base/callback.h:91:12 (browser_tests+0x41b5b3a)
    #22 base::debug::TaskAnnotator::RunTask(char const*, base::PendingTask*) base/debug/task_annotator.cc:59 (browser_tests+0x41b5b3a)
    #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 (browser_tests+0x4265c89)
    #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 (browser_tests+0x426662a)
    #25 base::internal::TaskTracker::RunNextTask(base::internal::Sequence*) base/task_scheduler/task_tracker.cc:251:5 (browser_tests+0x4265113)
    #26 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:84:34 (browser_tests+0x42e85a4)
    #27 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:71:13 (browser_tests+0x42725a8)
  Mutex M125110181129911200 is already destroyed.
  Thread T24 'Chrome_IOThread' (tid=25147, running) created by main thread at:
    #0 pthread_create <null> (browser_tests+0x58da23)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (browser_tests+0x4271ee6)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (browser_tests+0x4271da5)
    #3 base::Thread::StartWithOptions(base::Thread::Options const&) base/threading/thread.cc:112:15 (browser_tests+0x427d8d3)
    #4 content::BrowserThreadImpl::StartWithOptions(base::Thread::Options const&) content/browser/browser_thread_impl.cc:404:25 (browser_tests+0x235a30a)
    #5 content::BrowserMainLoop::CreateThreads() content/browser/browser_main_loop.cc:1111:49 (browser_tests+0x2343d87)
    #6 Invoke<content::BrowserMainLoop *> base/bind_internal.h:196:12 (browser_tests+0x2349795)
    #7 MakeItSo<int (content::BrowserMainLoop::*const &)(), content::BrowserMainLoop *> base/bind_internal.h:262 (browser_tests+0x2349795)
    #8 RunImpl<int (content::BrowserMainLoop::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<content::BrowserMainLoop> > &, 0> base/bind_internal.h:338 (browser_tests+0x2349795)
    #9 base::internal::Invoker<base::internal::BindState<int (content::BrowserMainLoop::*)(), base::internal::UnretainedWrapper<content::BrowserMainLoop> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (browser_tests+0x2349795)
    #10 Run base/callback.h:80:12 (browser_tests+0x29f8f4e)
    #11 content::StartupTaskRunner::RunAllTasksNow() content/browser/startup_task_runner.cc:45 (browser_tests+0x29f8f4e)
    #12 content::BrowserMainLoop::CreateStartupTasks() content/browser/browser_main_loop.cc:936:25 (browser_tests+0x234398b)
    #13 content::BrowserMainRunnerImpl::Initialize(content::MainFunctionParams const&) content/browser/browser_main_runner.cc:127:17 (browser_tests+0x234a145)
    #14 content::BrowserMain(content::MainFunctionParams const&) content/browser/browser_main.cc:42:32 (browser_tests+0x23401a0)
    #15 content::RunNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:408:14 (browser_tests+0x4177da4)
    #16 content::ContentMainRunnerImpl::Run() content/app/content_main_runner.cc:687:12 (browser_tests+0x4178af7)
    #17 content::ContentServiceManagerMainDelegate::RunEmbedderProcess() content/app/content_service_manager_main_delegate.cc:51:32 (browser_tests+0x41765af)
    #18 service_manager::Main(service_manager::MainParams const&) services/service_manager/embedder/main.cc:469:29 (browser_tests+0x6fc686a)
    #19 content::ContentMain(content::ContentMainParams const&) content/app/content_main.cc:19:10 (browser_tests+0x4176d4b)
    #20 content::BrowserTestBase::SetUp() content/public/test/browser_test_base.cc:271:3 (browser_tests+0x4cd5996)
    #21 InProcessBrowserTest::SetUp() chrome/test/base/in_process_browser_test.cc:271:20 (browser_tests+0x4318920)
    #22 SetUp chrome/browser/extensions/extension_browsertest.cc:164:25 (browser_tests+0x1475aa4)
    #23 virtual thunk to ExtensionBrowserTest::SetUp() chrome/browser/extensions/extension_browsertest.cc (browser_tests+0x1475aa4)
    #24 HandleExceptionsInMethodIfSupported<testing::Test, void> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (browser_tests+0x18d88b6)
    #25 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2467 (browser_tests+0x18d88b6)
    #26 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2653:11 (browser_tests+0x18d98ad)
    #27 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2771:28 (browser_tests+0x18da0e6)
    #28 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4648:43 (browser_tests+0x18e3426)
    #29 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (browser_tests+0x18e2e24)
    #30 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4256 (browser_tests+0x18e2e24)
    #31 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (browser_tests+0x4333b75)
    #32 base::TestSuite::Run() base/test/test_suite.cc:270 (browser_tests+0x4333b75)
    #33 ChromeTestSuiteRunner::RunTestSuite(int, char**) chrome/test/base/chrome_test_launcher.cc:68:38 (browser_tests+0x419f538)
    #34 ChromeTestLauncherDelegate::RunTestSuite(int, char**) chrome/test/base/chrome_test_launcher.cc:77:19 (browser_tests+0x419f65f)
    #35 content::LaunchTests(content::TestLauncherDelegate*, unsigned long, int, char**) content/public/test/test_launcher.cc:520:31 (browser_tests+0x4d32224)
    #36 LaunchChromeTests(unsigned long, content::TestLauncherDelegate*, int, char**) chrome/test/base/chrome_test_launcher.cc:149:10 (browser_tests+0x419fac0)
    #37 main chrome/test/base/browser_tests_main.cc:21:10 (browser_tests+0x419f3fa)
  Thread T19 'TaskSchedulerSi' (tid=25142, running) created by main thread at:
    #0 pthread_create <null> (browser_tests+0x58da23)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:110:13 (browser_tests+0x4271ee6)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:193:10 (browser_tests+0x4271da5)
    #3 Initialize base/task_scheduler/scheduler_worker.cc:144:5 (browser_tests+0x42e81f1)
    #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:31 (browser_tests+0x42e81f1)
    #5 base::internal::SchedulerWorker::CreateThread() base/task_scheduler/scheduler_worker.cc:328:15 (browser_tests+0x42e7a1f)
    #6 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:236:5 (browser_tests+0x42e7976)
    #7 CreateTaskRunnerWithTraitsImpl<base::internal::(anonymous namespace)::SchedulerWorkerDelegate> base/task_scheduler/scheduler_single_thread_task_runner_manager.cc:453:13 (browser_tests+0x42e5b87)
    #8 base::internal::SchedulerSingleThreadTaskRunnerManager::CreateSingleThreadTaskRunnerWithTraits(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, base::TaskTraits const&, base::SingleThreadTaskRunnerThreadMode) base/task_scheduler/scheduler_single_thread_task_runner_manager.cc:396 (browser_tests+0x42e5b87)
    #9 base::internal::TaskSchedulerImpl::CreateSingleThreadTaskRunnerWithTraits(base::TaskTraits const&, base::SingleThreadTaskRunnerThreadMode) base/task_scheduler/task_scheduler_impl.cc:115:8 (browser_tests+0x4263f28)
    #10 base::CreateSingleThreadTaskRunnerWithTraits(base::TaskTraits const&, base::SingleThreadTaskRunnerThreadMode) base/task_scheduler/post_task.cc:107:40 (browser_tests+0x4260ab8)
    #11 content::BrowserMainLoop::CreateThreads() content/browser/browser_main_loop.cc:1128:33 (browser_tests+0x23444ec)
    #12 Invoke<content::BrowserMainLoop *> base/bind_internal.h:196:12 (browser_tests+0x2349795)
    #13 MakeItSo<int (content::BrowserMainLoop::*const &)(), content::BrowserMainLoop *> base/bind_internal.h:262 (browser_tests+0x2349795)
    #14 RunImpl<int (content::BrowserMainLoop::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<content::BrowserMainLoop> > &, 0> base/bind_internal.h:338 (browser_tests+0x2349795)
    #15 base::internal::Invoker<base::internal::BindState<int (content::BrowserMainLoop::*)(), base::internal::UnretainedWrapper<content::BrowserMainLoop> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:316 (browser_tests+0x2349795)
    #16 Run base/callback.h:80:12 (browser_tests+0x29f8f4e)
    #17 content::StartupTaskRunner::RunAllTasksNow() content/browser/startup_task_runner.cc:45 (browser_tests+0x29f8f4e)
    #18 content::BrowserMainLoop::CreateStartupTasks() content/browser/browser_main_loop.cc:936:25 (browser_tests+0x234398b)
    #19 content::BrowserMainRunnerImpl::Initialize(content::MainFunctionParams const&) content/browser/browser_main_runner.cc:127:17 (browser_tests+0x234a145)
    #20 content::BrowserMain(content::MainFunctionParams const&) content/browser/browser_main.cc:42:32 (browser_tests+0x23401a0)
    #21 content::RunNamedProcessTypeMain(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, content::MainFunctionParams const&, content::ContentMainDelegate*) content/app/content_main_runner.cc:408:14 (browser_tests+0x4177da4)
    #22 content::ContentMainRunnerImpl::Run() content/app/content_main_runner.cc:687:12 (browser_tests+0x4178af7)
    #23 content::ContentServiceManagerMainDelegate::RunEmbedderProcess() content/app/content_service_manager_main_delegate.cc:51:32 (browser_tests+0x41765af)
    #24 service_manager::Main(service_manager::MainParams const&) services/service_manager/embedder/main.cc:469:29 (browser_tests+0x6fc686a)
    #25 content::ContentMain(content::ContentMainParams const&) content/app/content_main.cc:19:10 (browser_tests+0x4176d4b)
    #26 content::BrowserTestBase::SetUp() content/public/test/browser_test_base.cc:271:3 (browser_tests+0x4cd5996)
    #27 InProcessBrowserTest::SetUp() chrome/test/base/in_process_browser_test.cc:271:20 (browser_tests+0x4318920)
    #28 SetUp chrome/browser/extensions/extension_browsertest.cc:164:25 (browser_tests+0x1475aa4)
    #29 virtual thunk to ExtensionBrowserTest::SetUp() chrome/browser/extensions/extension_browsertest.cc (browser_tests+0x1475aa4)
    #30 HandleExceptionsInMethodIfSupported<testing::Test, void> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (browser_tests+0x18d88b6)
    #31 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc:2467 (browser_tests+0x18d88b6)
    #32 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2653:11 (browser_tests+0x18d98ad)
    #33 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2771:28 (browser_tests+0x18da0e6)
    #34 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4648:43 (browser_tests+0x18e3426)
    #35 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> third_party/googletest/src/googletest/src/gtest.cc:2455:12 (browser_tests+0x18e2e24)
    #36 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc:4256 (browser_tests+0x18e2e24)
    #37 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2237:46 (browser_tests+0x4333b75)
    #38 base::TestSuite::Run() base/test/test_suite.cc:270 (browser_tests+0x4333b75)
    #39 ChromeTestSuiteRunner::RunTestSuite(int, char**) chrome/test/base/chrome_test_launcher.cc:68:38 (browser_tests+0x419f538)
    #40 ChromeTestLauncherDelegate::RunTestSuite(int, char**) chrome/test/base/chrome_test_launcher.cc:77:19 (browser_tests+0x419f65f)
    #41 content::LaunchTests(content::TestLauncherDelegate*, unsigned long, int, char**) content/public/test/test_launcher.cc:520:31 (browser_tests+0x4d32224)
    #42 LaunchChromeTests(unsigned long, content::TestLauncherDelegate*, int, char**) chrome/test/base/chrome_test_launcher.cc:149:10 (browser_tests+0x419fac0)
    #43 main chrome/test/base/browser_tests_main.cc:21:10 (browser_tests+0x419f3fa)
SUMMARY: ThreadSanitizer: data race base/metrics/persistent_memory_allocator.cc:865:16 in GetBlock
 
Project Member

Comment 1 by bugdroid1@chromium.org, Aug 2 2017

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

commit 72892854b36e2c3543beb19e0cbfdb7a4abb467c
Author: Brian White <bcwhite@chromium.org>
Date: Wed Aug 02 21:31:33 2017

Use Acquire/Release for bucket-ranges persistent reference.

When memory blocks are found by iteration, it is synchronized.  When
the blocks are passed directly by reference, those references need
acquire/release semantics.

Bug:  749328 
Change-Id: I87c8888cc2153ab027ee51791fd64d095b1d59e8
Reviewed-on: https://chromium-review.googlesource.com/596273
Reviewed-by: Gabriel Charette <gab@chromium.org>
Commit-Queue: Brian White <bcwhite@chromium.org>
Cr-Commit-Position: refs/heads/master@{#491507}
[modify] https://crrev.com/72892854b36e2c3543beb19e0cbfdb7a4abb467c/base/metrics/bucket_ranges.h

Comment 2 by gab@chromium.org, Aug 7 2017

Status: Fixed (was: Assigned)

Sign in to add a comment