LayerTreeHostTestReadyToDrawVisibility has a thread race |
|||
Issue description
[ RUN ] LayerTreeHostTestReadyToDrawVisibility.RunSingleThread_DelegatingRenderer
==================
WARNING: ThreadSanitizer: data race (pid=36663)
Write of size 8 at 0x7b18000028f0 by main thread (mutexes: write M3782, write M3767):
#0 erase buildtools/third_party/libc++/trunk/include/__tree:1969 (cc_unittests+0x0000013b9b46)
#1 __erase_unique<int> buildtools/third_party/libc++/trunk/include/__tree:1996 (cc_unittests+0x0000013b9b46)
#2 erase buildtools/third_party/libc++/trunk/include/map:1238 (cc_unittests+0x0000013b9b46)
#3 OnGpuMemoryBufferDestroyed cc/test/test_gpu_memory_buffer_manager.cc:152 (cc_unittests+0x0000013b9b46)
#4 ~GpuMemoryBufferImpl cc/test/test_gpu_memory_buffer_manager.cc:37 (cc_unittests+0x0000013b9b46)
#5 cc::(anonymous namespace)::GpuMemoryBufferImpl::~GpuMemoryBufferImpl() cc/test/test_gpu_memory_buffer_manager.cc:37 (cc_unittests+0x0000013b9bd9)
#6 operator() buildtools/third_party/libc++/trunk/include/memory:2529 (discriminator 1) (cc_unittests+0x0000012826a8)
#7 reset buildtools/third_party/libc++/trunk/include/memory:2735 (discriminator 1) (cc_unittests+0x0000012826a8)
#8 ~unique_ptr buildtools/third_party/libc++/trunk/include/memory:2703 (discriminator 1) (cc_unittests+0x0000012826a8)
#9 ~StagingBuffer cc/raster/staging_buffer_pool.cc:77 (discriminator 1) (cc_unittests+0x0000012826a8)
#10 operator() buildtools/third_party/libc++/trunk/include/memory:2529 (discriminator 1) (cc_unittests+0x0000012826a8)
#11 reset buildtools/third_party/libc++/trunk/include/memory:2735 (discriminator 1) (cc_unittests+0x0000012826a8)
#12 ~unique_ptr buildtools/third_party/libc++/trunk/include/memory:2703 (discriminator 1) (cc_unittests+0x0000012826a8)
#13 destroy buildtools/third_party/libc++/trunk/include/memory:1795 (discriminator 1) (cc_unittests+0x0000012826a8)
#14 __destroy<std::__1::unique_ptr<cc::StagingBuffer, std::__1::default_delete<cc::StagingBuffer> > > buildtools/third_party/libc++/trunk/include/memory:1668 (discriminator 1) (cc_unittests+0x0000012826a8)
#15 destroy<std::__1::unique_ptr<cc::StagingBuffer, std::__1::default_delete<cc::StagingBuffer> > > buildtools/third_party/libc++/trunk/include/memory:1536 (discriminator 1) (cc_unittests+0x0000012826a8)
#16 pop_front buildtools/third_party/libc++/trunk/include/deque:2568 (discriminator 1) (cc_unittests+0x0000012826a8)
#17 ReleaseBuffersNotUsedSince cc/raster/staging_buffer_pool.cc:430 (discriminator 1) (cc_unittests+0x0000012826a8)
#18 ReduceMemoryUsage cc/raster/staging_buffer_pool.cc:388 (discriminator 1) (cc_unittests+0x000001281b7b)
#19 Invoke<const base::WeakPtr<cc::StagingBufferPool> &> base/bind_internal.h:214 (discriminator 3) (cc_unittests+0x000001285247)
#20 MakeItSo<void (cc::StagingBufferPool::*const &)(), const base::WeakPtr<cc::StagingBufferPool> &> base/bind_internal.h:305 (discriminator 3) (cc_unittests+0x000001285247)
#21 RunImpl<void (cc::StagingBufferPool::*const &)(), const std::__1::tuple<base::WeakPtr<cc::StagingBufferPool> > &, 0> base/bind_internal.h:361 (discriminator 3) (cc_unittests+0x000001285247)
#22 Run base/bind_internal.h:339 (discriminator 3) (cc_unittests+0x000001285247)
#23 Run base/callback.h:68 (discriminator 1) (cc_unittests+0x000001586dfc)
#24 RunTask base/debug/task_annotator.cc:52 (discriminator 1) (cc_unittests+0x000001586dfc)
#25 RunTask base/message_loop/message_loop.cc:421 (cc_unittests+0x00000151fdb2)
#26 DeferOrRunPendingTask base/message_loop/message_loop.cc:430 (cc_unittests+0x00000152036d)
#27 DoDelayedWork base/message_loop/message_loop.cc:562 (discriminator 2) (cc_unittests+0x000001520e58)
#28 Run base/message_loop/message_pump_default.cc:37 (cc_unittests+0x000001524254)
#29 RunHandler base/message_loop/message_loop.cc:386 (discriminator 1) (cc_unittests+0x00000151f8db)
#30 Run base/run_loop.cc:37 (cc_unittests+0x0000015397b9)
#31 RunTest cc/test/layer_tree_test.cc:764 (discriminator 1) (cc_unittests+0x0000013a437d)
#32 cc::(anonymous namespace)::LayerTreeHostTestReadyToDrawVisibility_RunSingleThread_DelegatingRenderer_Test::TestBody() cc/trees/layer_tree_host_unittest.cc:437 (cc_unittests+0x000000e82574)
#33 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458 (discriminator 3) (cc_unittests+0x000001472536)
#34 Run testing/gtest/src/gtest.cc:2474 (discriminator 3) (cc_unittests+0x000001472536)
#35 Run testing/gtest/src/gtest.cc:2656 (cc_unittests+0x0000014736dc)
#36 Run testing/gtest/src/gtest.cc:2774 (discriminator 1) (cc_unittests+0x000001473fb6)
#37 RunAllTests testing/gtest/src/gtest.cc:4647 (discriminator 1) (cc_unittests+0x00000147eed6)
#38 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458 (discriminator 3) (cc_unittests+0x00000147e769)
#39 Run testing/gtest/src/gtest.cc:4255 (discriminator 3) (cc_unittests+0x00000147e769)
#40 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237 (discriminator 1) (cc_unittests+0x0000013c6879)
#41 Run base/test/test_suite.cc:271 (discriminator 1) (cc_unittests+0x0000013c6879)
#42 Invoke<cc::CCTestSuite *> base/bind_internal.h:214 (discriminator 3) (cc_unittests+0x000001147c95)
#43 MakeItSo<int (base::TestSuite::*const &)(), cc::CCTestSuite *> base/bind_internal.h:285 (discriminator 3) (cc_unittests+0x000001147c95)
#44 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<cc::CCTestSuite> > &, 0> base/bind_internal.h:361 (discriminator 3) (cc_unittests+0x000001147c95)
#45 Run base/bind_internal.h:339 (discriminator 3) (cc_unittests+0x000001147c95)
#46 Run base/callback.h:85 (discriminator 1) (cc_unittests+0x0000013c8113)
#47 LaunchUnitTestsInternal base/test/launcher/unit_test_launcher.cc:211 (discriminator 1) (cc_unittests+0x0000013c8113)
#48 LaunchUnitTests base/test/launcher/unit_test_launcher.cc:453 (cc_unittests+0x0000013c7f9a)
#49 main cc/test/run_all_unittests.cc:15 (cc_unittests+0x000001147be5)
,
Feb 9 2017
Previous read of size 8 at 0x7b18000028f0 by thread T1:
[failed to restore the stack]
Thread T1 'TestTaskGraphRu' (tid=36665, running) created by main thread at:
#0 pthread_create ??:? (cc_unittests+0x0000004f59a5)
#1 CreateThread base/threading/platform_thread_posix.cc:110 (discriminator 1) (cc_unittests+0x00000154f237)
#2 base::PlatformThread::CreateWithPriority(unsigned long, base::PlatformThread::Delegate*, base::PlatformThreadHandle*, base::ThreadPriority) base/threading/platform_thread_posix.cc:191 (cc_unittests+0x00000154f135)
#3 base::SimpleThread::Start() base/threading/simple_thread.cc:34 (cc_unittests+0x000001554cf3)
#4 Start cc/raster/single_thread_task_graph_runner.cc:30 (discriminator 1) (cc_unittests+0x0000012808bd)
#5 TestTaskGraphRunner cc/test/test_task_graph_runner.cc:10 (discriminator 2) (cc_unittests+0x0000013bc36e)
#6 RunTest cc/test/layer_tree_test.cc:746 (discriminator 1) (cc_unittests+0x0000013a4133)
#7 cc::(anonymous namespace)::LayerTreeHostTestReadyToDrawVisibility_RunSingleThread_DelegatingRenderer_Test::TestBody() cc/trees/layer_tree_host_unittest.cc:437 (cc_unittests+0x000000e82574)
#8 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458 (discriminator 3) (cc_unittests+0x000001472536)
#9 Run testing/gtest/src/gtest.cc:2474 (discriminator 3) (cc_unittests+0x000001472536)
#10 Run testing/gtest/src/gtest.cc:2656 (cc_unittests+0x0000014736dc)
#11 Run testing/gtest/src/gtest.cc:2774 (discriminator 1) (cc_unittests+0x000001473fb6)
#12 RunAllTests testing/gtest/src/gtest.cc:4647 (discriminator 1) (cc_unittests+0x00000147eed6)
#13 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458 (discriminator 3) (cc_unittests+0x00000147e769)
#14 Run testing/gtest/src/gtest.cc:4255 (discriminator 3) (cc_unittests+0x00000147e769)
#15 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237 (discriminator 1) (cc_unittests+0x0000013c6879)
#16 Run base/test/test_suite.cc:271 (discriminator 1) (cc_unittests+0x0000013c6879)
#17 Invoke<cc::CCTestSuite *> base/bind_internal.h:214 (discriminator 3) (cc_unittests+0x000001147c95)
#18 MakeItSo<int (base::TestSuite::*const &)(), cc::CCTestSuite *> base/bind_internal.h:285 (discriminator 3) (cc_unittests+0x000001147c95)
#19 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<cc::CCTestSuite> > &, 0> base/bind_internal.h:361 (discriminator 3) (cc_unittests+0x000001147c95)
#20 Run base/bind_internal.h:339 (discriminator 3) (cc_unittests+0x000001147c95)
#21 Run base/callback.h:85 (discriminator 1) (cc_unittests+0x0000013c8113)
#22 LaunchUnitTestsInternal base/test/launcher/unit_test_launcher.cc:211 (discriminator 1) (cc_unittests+0x0000013c8113)
#23 LaunchUnitTests base/test/launcher/unit_test_launcher.cc:453 (cc_unittests+0x0000013c7f9a)
#24 main cc/test/run_all_unittests.cc:15 (cc_unittests+0x000001147be5)
,
Feb 9 2017
LayerTreeHostTestReadyToDrawNonEmpty.RunSingleThread_DelegatingRenderer has the same problem. I got a trace of T1 there:
[ RUN ] LayerTreeHostTestReadyToDrawNonEmpty.RunSingleThread_DelegatingRenderer
==================
WARNING: ThreadSanitizer: data race (pid=42566)
Write of size 8 at 0x7b18000028f0 by main thread (mutexes: write M3782, write M3767):
#0 erase buildtools/third_party/libc++/trunk/include/__tree:1969 (cc_unittests+0x0000013b9b46)
#1 __erase_unique<int> buildtools/third_party/libc++/trunk/include/__tree:1996 (cc_unittests+0x0000013b9b46)
#2 erase buildtools/third_party/libc++/trunk/include/map:1238 (cc_unittests+0x0000013b9b46)
#3 OnGpuMemoryBufferDestroyed cc/test/test_gpu_memory_buffer_manager.cc:152 (cc_unittests+0x0000013b9b46)
#4 ~GpuMemoryBufferImpl cc/test/test_gpu_memory_buffer_manager.cc:37 (cc_unittests+0x0000013b9b46)
#5 cc::(anonymous namespace)::GpuMemoryBufferImpl::~GpuMemoryBufferImpl() cc/test/test_gpu_memory_buffer_manager.cc:37 (cc_unittests+0x0000013b9bd9)
#6 operator() buildtools/third_party/libc++/trunk/include/memory:2529 (discriminator 1) (cc_unittests+0x0000012826a8)
#7 reset buildtools/third_party/libc++/trunk/include/memory:2735 (discriminator 1) (cc_unittests+0x0000012826a8)
#8 ~unique_ptr buildtools/third_party/libc++/trunk/include/memory:2703 (discriminator 1) (cc_unittests+0x0000012826a8)
#9 ~StagingBuffer cc/raster/staging_buffer_pool.cc:77 (discriminator 1) (cc_unittests+0x0000012826a8)
#10 operator() buildtools/third_party/libc++/trunk/include/memory:2529 (discriminator 1) (cc_unittests+0x0000012826a8)
#11 reset buildtools/third_party/libc++/trunk/include/memory:2735 (discriminator 1) (cc_unittests+0x0000012826a8)
#12 ~unique_ptr buildtools/third_party/libc++/trunk/include/memory:2703 (discriminator 1) (cc_unittests+0x0000012826a8)
#13 destroy buildtools/third_party/libc++/trunk/include/memory:1795 (discriminator 1) (cc_unittests+0x0000012826a8)
#14 __destroy<std::__1::unique_ptr<cc::StagingBuffer, std::__1::default_delete<cc::StagingBuffer> > > buildtools/third_party/libc++/trunk/include/memory:1668 (discriminator 1) (cc_unittests+0x0000012826a8)
#15 destroy<std::__1::unique_ptr<cc::StagingBuffer, std::__1::default_delete<cc::StagingBuffer> > > buildtools/third_party/libc++/trunk/include/memory:1536 (discriminator 1) (cc_unittests+0x0000012826a8)
#16 pop_front buildtools/third_party/libc++/trunk/include/deque:2568 (discriminator 1) (cc_unittests+0x0000012826a8)
#17 ReleaseBuffersNotUsedSince cc/raster/staging_buffer_pool.cc:430 (discriminator 1) (cc_unittests+0x0000012826a8)
#18 ReduceMemoryUsage cc/raster/staging_buffer_pool.cc:388 (discriminator 1) (cc_unittests+0x000001281b7b)
#19 Invoke<const base::WeakPtr<cc::StagingBufferPool> &> base/bind_internal.h:214 (discriminator 3) (cc_unittests+0x000001285247)
#20 MakeItSo<void (cc::StagingBufferPool::*const &)(), const base::WeakPtr<cc::StagingBufferPool> &> base/bind_internal.h:305 (discriminator 3) (cc_unittests+0x000001285247)
#21 RunImpl<void (cc::StagingBufferPool::*const &)(), const std::__1::tuple<base::WeakPtr<cc::StagingBufferPool> > &, 0> base/bind_internal.h:361 (discriminator 3) (cc_unittests+0x000001285247)
#22 Run base/bind_internal.h:339 (discriminator 3) (cc_unittests+0x000001285247)
#23 Run base/callback.h:68 (discriminator 1) (cc_unittests+0x000001586dfc)
#24 RunTask base/debug/task_annotator.cc:52 (discriminator 1) (cc_unittests+0x000001586dfc)
#25 RunTask base/message_loop/message_loop.cc:421 (cc_unittests+0x00000151fdb2)
#26 DeferOrRunPendingTask base/message_loop/message_loop.cc:430 (cc_unittests+0x00000152036d)
#27 DoDelayedWork base/message_loop/message_loop.cc:562 (discriminator 2) (cc_unittests+0x000001520e58)
#28 Run base/message_loop/message_pump_default.cc:37 (cc_unittests+0x000001524254)
#29 RunHandler base/message_loop/message_loop.cc:386 (discriminator 1) (cc_unittests+0x00000151f8db)
#30 Run base/run_loop.cc:37 (cc_unittests+0x0000015397b9)
#31 RunTest cc/test/layer_tree_test.cc:764 (discriminator 1) (cc_unittests+0x0000013a437d)
#32 cc::(anonymous namespace)::LayerTreeHostTestReadyToDrawNonEmpty_RunSingleThread_DelegatingRenderer_Test::TestBody() cc/trees/layer_tree_host_unittest.cc:363 (cc_unittests+0x000000e81b74)
#33 HandleExceptionsInMethodIfSupported<testing::Test, void> testing/gtest/src/gtest.cc:2458 (discriminator 3) (cc_unittests+0x000001472536)
#34 Run testing/gtest/src/gtest.cc:2474 (discriminator 3) (cc_unittests+0x000001472536)
#35 Run testing/gtest/src/gtest.cc:2656 (cc_unittests+0x0000014736dc)
#36 Run testing/gtest/src/gtest.cc:2774 (discriminator 1) (cc_unittests+0x000001473fb6)
#37 RunAllTests testing/gtest/src/gtest.cc:4647 (discriminator 1) (cc_unittests+0x00000147eed6)
#38 HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool> testing/gtest/src/gtest.cc:2458 (discriminator 3) (cc_unittests+0x00000147e769)
#39 Run testing/gtest/src/gtest.cc:4255 (discriminator 3) (cc_unittests+0x00000147e769)
#40 RUN_ALL_TESTS testing/gtest/include/gtest/gtest.h:2237 (discriminator 1) (cc_unittests+0x0000013c6879)
#41 Run base/test/test_suite.cc:271 (discriminator 1) (cc_unittests+0x0000013c6879)
#42 Invoke<cc::CCTestSuite *> base/bind_internal.h:214 (discriminator 3) (cc_unittests+0x000001147c95)
#43 MakeItSo<int (base::TestSuite::*const &)(), cc::CCTestSuite *> base/bind_internal.h:285 (discriminator 3) (cc_unittests+0x000001147c95)
#44 RunImpl<int (base::TestSuite::*const &)(), const std::__1::tuple<base::internal::UnretainedWrapper<cc::CCTestSuite> > &, 0> base/bind_internal.h:361 (discriminator 3) (cc_unittests+0x000001147c95)
#45 Run base/bind_internal.h:339 (discriminator 3) (cc_unittests+0x000001147c95)
#46 Run base/callback.h:85 (discriminator 1) (cc_unittests+0x0000013c8113)
#47 LaunchUnitTestsInternal base/test/launcher/unit_test_launcher.cc:211 (discriminator 1) (cc_unittests+0x0000013c8113)
#48 LaunchUnitTests base/test/launcher/unit_test_launcher.cc:453 (cc_unittests+0x0000013c7f9a)
#49 main cc/test/run_all_unittests.cc:15 (cc_unittests+0x000001147be5)
Previous read of size 8 at 0x7b18000028f0 by thread T1:
#0 __insert_node_at buildtools/third_party/libc++/trunk/include/__tree:1704 (cc_unittests+0x0000013b9850)
#1 operator[] buildtools/third_party/libc++/trunk/include/map:1542 (cc_unittests+0x0000013b9850)
#2 CreateGpuMemoryBuffer cc/test/test_gpu_memory_buffer_manager.cc:171 (cc_unittests+0x0000013b9850)
#3 PlaybackToStagingBuffer cc/raster/one_copy_raster_buffer_provider.cc:226 (discriminator 1) (cc_unittests+0x00000127f143)
#4 PlaybackAndCopyOnWorkerThread cc/raster/one_copy_raster_buffer_provider.cc:200 (discriminator 1) (cc_unittests+0x00000127e81d)
#5 Playback cc/raster/one_copy_raster_buffer_provider.cc:62 (cc_unittests+0x00000127e5ae)
#6 RunOnWorkerThread cc/tiles/tile_manager.cc:129 (discriminator 2) (cc_unittests+0x0000012e795e)
#7 RunTaskWithLockAcquired cc/raster/single_thread_task_graph_runner.cc:154 (discriminator 1) (cc_unittests+0x0000012812c3)
#8 Run cc/raster/single_thread_task_graph_runner.cc:117 (cc_unittests+0x00000128152f)
#9 <null> cc/raster/single_thread_task_graph_runner.cc:? (cc_unittests+0x00000128152f)
#10 base::DelegateSimpleThread::Run() base/threading/simple_thread.cc:92 (cc_unittests+0x000001554fb8)
#11 ThreadMain base/threading/simple_thread.cc:68 (cc_unittests+0x000001554e22)
#12 ThreadFunc base/threading/platform_thread_posix.cc:71 (cc_unittests+0x00000154f56d)
,
Feb 9 2017
,
Feb 9 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/5cd331dec1c51a6040c15c1afb4eb03d77187dbe commit 5cd331dec1c51a6040c15c1afb4eb03d77187dbe Author: danakj <danakj@chromium.org> Date: Thu Feb 09 21:51:08 2017 cc: Lock access to |buffers_| in TestGpuMemoryBufferManager The manager is used to create buffers on one thread that may be destroyed on another thread. When destroyed they call back to the TestGpuMemoryBufferManager causing a data race. R=vmpstr@chromium.org BUG= 690588 CQ_INCLUDE_TRYBOTS=master.tryserver.blink:linux_trusty_blink_rel Review-Url: https://codereview.chromium.org/2682743007 Cr-Commit-Position: refs/heads/master@{#449426} [modify] https://crrev.com/5cd331dec1c51a6040c15c1afb4eb03d77187dbe/cc/test/test_gpu_memory_buffer_manager.cc [modify] https://crrev.com/5cd331dec1c51a6040c15c1afb4eb03d77187dbe/cc/test/test_gpu_memory_buffer_manager.h
,
Feb 9 2017
|
|||
►
Sign in to add a comment |
|||
Comment 1 by danakj@chromium.org
, Feb 9 2017