New issue
Advanced search Search tips

Issue 811482 link

Starred by 1 user

Issue metadata

Status: Fixed
Owner:
Closed: Feb 2018
Cc:
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 2
Type: ----



Sign in to add a comment

TSan failure for |dumper_registrations_ignored_for_testing_|

Project Member Reported by sheriff-...@appspot.gserviceaccount.com, Feb 12 2018

Issue description

Filed by sheriff-o-matic@appspot.gserviceaccount.com on behalf of liberato@google.com

MemoryDumpManagerTest.DisableFailingDumpers and 14 other(s) in base_unittests failing on chromium.memory/Linux TSan Tests

Builders failed on: 
- Linux TSan Tests: 
  https://build.chromium.org/p/chromium.memory/builders/Linux%20TSan%20Tests

Looks like access to |dumper_registrations_ignored_for_testing_| is accessed without a lock, and TSan is getting mad about it.
 
Labels: OS-Linux
Owner: ssid@chromium.org
Status: Assigned (was: Available)
assigning to ssid@ for triage.  thanks!
 Issue 811481  has been merged into this issue.
Cc: ssid@chromium.org
Owner: gab@chromium.org
auto-triage found this to be the culprit:

https://chromium-review.googlesource.com/913251

assigning to gab@ .  thanks!
I'll revert this
Labels: -Sheriff-Chromium

Comment 6 by gab@chromium.org, Feb 13 2018

Status: Started (was: Assigned)
Thanks, please make a habit of pasting error logs when reverting changes as they get recycled frequently, for this instance this is the error :

WARNING: ThreadSanitizer: data race (pid=18936)
  Write of size 1 at 0x7b2000003470 by main thread:
    #0 set_dumper_registrations_ignored_for_testing base/trace_event/memory_dump_manager.h:176:47 (base_unittests+0xf58551)
    #1 InitializeMemoryDumpManagerForInProcessTesting base/trace_event/memory_dump_manager_test_utils.h:30 (base_unittests+0xf58551)
    #2 base::trace_event::MemoryDumpManagerTest_TearDownThreadWhileDumping_Test::TestBody() base/trace_event/memory_dump_manager_unittest.cc:691 (base_unittests+0xf58551)
    #3 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc (base_unittests+0x10d20ad)
    #4 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2651:11 (base_unittests+0x10d2fcd)
    #5 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2769:28 (base_unittests+0x10d3816)
    #6 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4665:43 (base_unittests+0x10deb96)
    #7 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc (base_unittests+0x10de565)
    #8 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2233:46 (base_unittests+0x1221da6)
    #9 base::TestSuite::Run() base/test/test_suite.cc:272 (base_unittests+0x1221da6)
    #10 Invoke<base::TestSuite *> base/bind_internal.h:211:12 (base_unittests+0x12123d8)
    #11 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:294 (base_unittests+0x12123d8)
    #12 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:368 (base_unittests+0x12123d8)
    #13 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350 (base_unittests+0x12123d8)
    #14 Run base/callback.h:94:12 (base_unittests+0x1231596)
    #15 base::(anonymous namespace)::LaunchUnitTestsInternal(base::RepeatingCallback<int ()> const&, unsigned long, int, bool, base::RepeatingCallback<void ()> const&) base/test/launcher/unit_test_launcher.cc:220 (base_unittests+0x1231596)
    #16 base::LaunchUnitTests(int, char**, base::RepeatingCallback<int ()> const&) base/test/launcher/unit_test_launcher.cc:558:10 (base_unittests+0x1231413)
    #17 main base/test/run_all_base_unittests.cc:12:10 (base_unittests+0x1212326)
  Previous read of size 1 at 0x7b2000003470 by thread T2:
    #0 base::trace_event::MemoryDumpManager::RegisterDumpProviderInternal(base::trace_event::MemoryDumpProvider*, char const*, scoped_refptr<base::SequencedTaskRunner>, base::trace_event::MemoryDumpProvider::Options const&) base/trace_event/memory_dump_manager.cc:384:7 (base_unittests+0x11ce552)
    #1 base::trace_event::MemoryDumpManager::RegisterDumpProvider(base::trace_event::MemoryDumpProvider*, char const*, scoped_refptr<base::SingleThreadTaskRunner>) base/trace_event/memory_dump_manager.cc:366:3 (base_unittests+0x11ce791)
    #2 base::trace_event::TraceLog::TraceLog() base/trace_event/trace_log.cc:377:37 (base_unittests+0x11ea91b)
    #3 New base/memory/singleton.h:53:16 (base_unittests+0x11eb42b)
    #4 CreatorFunc base/memory/singleton.h:250 (base_unittests+0x11eb42b)
    #5 GetOrCreateLazyPointer<base::trace_event::TraceLog> base/lazy_instance_helpers.h:83 (base_unittests+0x11eb42b)
    #6 get base/memory/singleton.h:243 (base_unittests+0x11eb42b)
    #7 GetInstance base/trace_event/trace_log.cc:342 (base_unittests+0x11eb42b)
    #8 base::trace_event::TraceLog::GetCategoryGroupEnabled(char const*) base/trace_event/trace_log.cc:425 (base_unittests+0x11eb42b)
    #9 base::internal::SchedulerWorker::Thread::ThreadMain() base/task_scheduler/scheduler_worker.cc:40:5 (base_unittests+0x1197e5c)
    #10 base::(anonymous namespace)::ThreadFunc(void*) base/threading/platform_thread_posix.cc:75:13 (base_unittests+0x11b2bcd)
  Location is heap block of size 120 at 0x7b2000003400 allocated by main thread:
    #0 operator new(unsigned long) /b/build/slave/linux_upload_clang/build/src/third_party/llvm/compiler-rt/lib/tsan/rtl/tsan_new_delete.cc:57:3 (base_unittests+0x4cfff9)
    #1 base::trace_event::MemoryDumpManager::CreateInstanceForTesting() base/trace_event/memory_dump_manager.cc:176:47 (base_unittests+0x11ce080)
    #2 base::trace_event::MemoryDumpManagerTest::SetUp() base/trace_event/memory_dump_manager_unittest.cc:188:12 (base_unittests+0xf5c463)
    #3 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc (base_unittests+0x10d1fb6)
    #4 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2651:11 (base_unittests+0x10d2fcd)
    #5 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2769:28 (base_unittests+0x10d3816)
    #6 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4665:43 (base_unittests+0x10deb96)
    #7 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc (base_unittests+0x10de565)
    #8 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2233:46 (base_unittests+0x1221da6)
    #9 base::TestSuite::Run() base/test/test_suite.cc:272 (base_unittests+0x1221da6)
    #10 Invoke<base::TestSuite *> base/bind_internal.h:211:12 (base_unittests+0x12123d8)
    #11 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:294 (base_unittests+0x12123d8)
    #12 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:368 (base_unittests+0x12123d8)
    #13 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350 (base_unittests+0x12123d8)
    #14 Run base/callback.h:94:12 (base_unittests+0x1231596)
    #15 base::(anonymous namespace)::LaunchUnitTestsInternal(base::RepeatingCallback<int ()> const&, unsigned long, int, bool, base::RepeatingCallback<void ()> const&) base/test/launcher/unit_test_launcher.cc:220 (base_unittests+0x1231596)
    #16 base::LaunchUnitTests(int, char**, base::RepeatingCallback<int ()> const&) base/test/launcher/unit_test_launcher.cc:558:10 (base_unittests+0x1231413)
    #17 main base/test/run_all_base_unittests.cc:12:10 (base_unittests+0x1212326)
  Thread T2 'TaskSchedulerBa' (tid=18939, running) created by main thread at:
    #0 pthread_create /b/build/slave/linux_upload_clang/build/src/third_party/llvm/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc:992:3 (base_unittests+0x4677d5)
    #1 base::(anonymous namespace)::CreateThread(unsigned long, bool, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:114:13 (base_unittests+0x11b26c7)
    #2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:199:10 (base_unittests+0x11b25c5)
    #3 Initialize base/task_scheduler/scheduler_worker.cc:123:5 (base_unittests+0x119744b)
    #4 base::internal::SchedulerWorker::Thread::Create(scoped_refptr<base::internal::SchedulerWorker>) base/task_scheduler/scheduler_worker.cc:32 (base_unittests+0x119744b)
    #5 base::internal::SchedulerWorker::Start() base/task_scheduler/scheduler_worker.cc:211:13 (base_unittests+0x11971e1)
    #6 base::internal::SchedulerWorkerPoolImpl::CreateRegisterAndStartSchedulerWorkerLockRequired() base/task_scheduler/scheduler_worker_pool_impl.cc:784:16 (base_unittests+0x1199d08)
    #7 base::internal::SchedulerWorkerPoolImpl::Start(base::SchedulerWorkerPoolParams const&, scoped_refptr<base::TaskRunner>, base::internal::SchedulerWorkerPoolImpl::WorkerEnvironment) base/task_scheduler/scheduler_worker_pool_impl.cc:229:9 (base_unittests+0x119968b)
    #8 base::internal::TaskSchedulerImpl::Start(base::TaskScheduler::InitParams const&) base/task_scheduler/task_scheduler_impl.cc:109:30 (base_unittests+0x119ec08)
    #9 base::test::ScopedTaskEnvironment::ScopedTaskEnvironment(base::test::ScopedTaskEnvironment::MainThreadType, base::test::ScopedTaskEnvironment::ExecutionMode) base/test/scoped_task_environment.cc:115:33 (base_unittests+0x1219fe3)
    #10 make_unique<base::test::ScopedTaskEnvironment> buildtools/third_party/libc++/trunk/include/memory:3079:32 (base_unittests+0xf5c5cb)
    #11 base::trace_event::MemoryDumpManagerTest::SetUp() base/trace_event/memory_dump_manager_unittest.cc:191 (base_unittests+0xf5c5cb)
    #12 testing::Test::Run() third_party/googletest/src/googletest/src/gtest.cc (base_unittests+0x10d1fb6)
    #13 testing::TestInfo::Run() third_party/googletest/src/googletest/src/gtest.cc:2651:11 (base_unittests+0x10d2fcd)
    #14 testing::TestCase::Run() third_party/googletest/src/googletest/src/gtest.cc:2769:28 (base_unittests+0x10d3816)
    #15 testing::internal::UnitTestImpl::RunAllTests() third_party/googletest/src/googletest/src/gtest.cc:4665:43 (base_unittests+0x10deb96)
    #16 testing::UnitTest::Run() third_party/googletest/src/googletest/src/gtest.cc (base_unittests+0x10de565)
    #17 RUN_ALL_TESTS third_party/googletest/src/googletest/include/gtest/gtest.h:2233:46 (base_unittests+0x1221da6)
    #18 base::TestSuite::Run() base/test/test_suite.cc:272 (base_unittests+0x1221da6)
    #19 Invoke<base::TestSuite *> base/bind_internal.h:211:12 (base_unittests+0x12123d8)
    #20 MakeItSo<int (base::TestSuite::*const &)(), base::TestSuite *> base/bind_internal.h:294 (base_unittests+0x12123d8)
    #21 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<base::TestSuite> > &, 0> base/bind_internal.h:368 (base_unittests+0x12123d8)
    #22 base::internal::Invoker<base::internal::BindState<int (base::TestSuite::*)(), base::internal::UnretainedWrapper<base::TestSuite> >, int ()>::Run(base::internal::BindStateBase*) base/bind_internal.h:350 (base_unittests+0x12123d8)
    #23 Run base/callback.h:94:12 (base_unittests+0x1231596)
    #24 base::(anonymous namespace)::LaunchUnitTestsInternal(base::RepeatingCallback<int ()> const&, unsigned long, int, bool, base::RepeatingCallback<void ()> const&) base/test/launcher/unit_test_launcher.cc:220 (base_unittests+0x1231596)
    #25 base::LaunchUnitTests(int, char**, base::RepeatingCallback<int ()> const&) base/test/launcher/unit_test_launcher.cc:558:10 (base_unittests+0x1231413)
    #26 main base/test/run_all_base_unittests.cc:12:10 (base_unittests+0x1212326)
Project Member

Comment 7 by bugdroid1@chromium.org, Feb 13 2018

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

commit 8c1fb16b6c55d7fbce3f2c90b56b70e6966b2290
Author: Gabriel Charette <gab@chromium.org>
Date: Tue Feb 13 10:24:06 2018

Reland "Add a trace event when a task scheduler worker is active."

This is a reland of d641a6adecc1dddf67823f2b424b6ebac79bce02.

It was reverted per causing data races in MemoryDumpManagerTests
as they re-initialized the MemoryDumpManager instance after scheduler
workers had been brought up (and the workers using tracing prior to
receiving a task -- which previously acted as a sync point -- is
now highlighting this initialization race).

Original change's description:
> Add a trace event when a task scheduler worker is active.
>
> Example trace with this enabled: https://drive.google.com/file/d/11si1qvQUhRi1jMPNTzgJpqp3D-yFKOf7/view?usp=sharing
>
> Also fix a racy setup order in MemoryDumpManagerTest exercised by this change.
>
> R=fdoray@chromium.org
>
> Bug:  811035 
> Change-Id: I328dca43f7b5bfd42bcf1a69b1e191fe41523ade
> Reviewed-on: https://chromium-review.googlesource.com/913251
> Reviewed-by: François Doray <fdoray@chromium.org>
> Commit-Queue: Gabriel Charette <gab@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#536177}

Bug:  811035 ,  811482 
Change-Id: If3a7b1dbfa8d50cec97b7b98e88c68f26f9813ec

TBR=fdoray@chromium.org

Change-Id: If3a7b1dbfa8d50cec97b7b98e88c68f26f9813ec
Reviewed-on: https://chromium-review.googlesource.com/915941
Reviewed-by: Primiano Tucci <primiano@chromium.org>
Commit-Queue: Primiano Tucci <primiano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#536322}
[modify] https://crrev.com/8c1fb16b6c55d7fbce3f2c90b56b70e6966b2290/base/task_scheduler/scheduler_worker.cc
[modify] https://crrev.com/8c1fb16b6c55d7fbce3f2c90b56b70e6966b2290/base/trace_event/memory_dump_manager_unittest.cc

Comment 8 by gab@chromium.org, Feb 13 2018

Status: Fixed (was: Started)

Sign in to add a comment