Details
-
Bug
-
Resolution: Fixed
-
Major
-
Cheshire-Cat
-
Triaged
-
1
-
Unknown
-
KV Sprint 2020-Oct
Description
When switching executor pool to FollyExecutorPool (http://review.couchbase.org/c/kv_engine/+/135709), the following TSan race is observed:
Running [0013/0099]: test dcp consumer noop...==================
|
WARNING: ThreadSanitizer: data race (pid=14065)
|
Write of size 4 at 0x7fdfb95d70d8 by thread T10:
|
#0 std::__atomic_base<unsigned int>::__atomic_base(unsigned int) /usr/local/include/c++/7.3.0/bits/atomic_base.h:256 (libep.so+0x598d7b)
|
#1 std::atomic<unsigned int>::atomic(unsigned int) /usr/local/include/c++/7.3.0/atomic:695 (libep.so+0x598d7b)
|
#2 void folly::detail::LifoSemNode<folly::SaturatingSemaphore<true, std::atomic>, std::atomic>::init<>() folly/synchronization/SaturatingSemaphore.h:136 (libep.so+0x598d7b)
|
#3 std::unique_ptr<folly::detail::LifoSemNode<folly::SaturatingSemaphore<true, std::atomic>, std::atomic>, folly::detail::LifoSemNodeRecycler<folly::SaturatingSemaphore<true, std::atomic>, std::atomic> > folly::detail::LifoSemBase<folly::SaturatingSemaphore<true, std::atomic>, std::atomic>::allocateNode<>() folly/synchronization/LifoSem.h:582 (libep.so+0x598d7b)
|
#4 bool folly::detail::LifoSemBase<folly::SaturatingSemaphore<true, std::atomic>, std::atomic>::try_wait_until<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > >(std::chrono::time_point<std::chrono::_V2::steady_clock, std::chrono::duration<long, std::ratio<1l, 1000000000l> > > const&) folly/synchronization/LifoSem.h:512 (libep.so+0x598d7b)
|
#5 bool folly::detail::LifoSemBase<folly::SaturatingSemaphore<true, std::atomic>, std::atomic>::try_wait_for<long, std::ratio<1l, 1000l> >(std::chrono::duration<long, std::ratio<1l, 1000l> > const&) folly/synchronization/LifoSem.h:498 (libep.so+0x59ee84)
|
#6 folly::UnboundedBlockingQueue<folly::CPUThreadPoolExecutor::CPUTask>::try_take_for(std::chrono::duration<long, std::ratio<1l, 1000l> >) folly/executors/task_queue/UnboundedBlockingQueue.h:41 (libep.so+0x59ee84)
|
#7 folly::CPUThreadPoolExecutor::threadRun(std::shared_ptr<folly::ThreadPoolExecutor::Thread>) folly/executors/CPUThreadPoolExecutor.cpp:243 (libep.so+0x58af8d)
|
#8 void std::__invoke_impl<void, void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>(std::__invoke_memfun_deref, void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&) /usr/local/include/c++/7.3.0/bits/invoke.h:73 (libep.so+0x5babab)
|
#9 std::__invoke_result<void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>::type std::__invoke<void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>(void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&) /usr/local/include/c++/7.3.0/bits/invoke.h:95 (libep.so+0x5babab)
|
#10 void std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)>::__call<void, 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/local/include/c++/7.3.0/functional:467 (libep.so+0x5babab)
|
#11 void std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)>::operator()<void>() /usr/local/include/c++/7.3.0/functional:551 (libep.so+0x5babab)
|
#12 void folly::detail::function::FunctionTraits<void ()>::callBig<std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)> >(folly::detail::function::Data&) folly/Function.h:401 (libep.so+0x5babab)
|
#13 folly::detail::function::FunctionTraits<void ()>::operator()() folly/Function.h:416:12 (libep.so+0x35390c)
|
#14 folly::PriorityThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()::operator()() folly/executors/thread_factory/PriorityThreadFactory.h:54:7 (libep.so+0x3545ec)
|
#15 void folly::detail::function::FunctionTraits<void ()>::callBig<folly::PriorityThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(folly::detail::function::Data&) folly/Function.h:401:7 (libep.so+0x35449d)
|
#16 folly::detail::function::FunctionTraits<void ()>::operator()() folly/Function.h:416:12 (libep.so+0x35390c)
|
#17 folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()::operator()() folly/executors/thread_factory/NamedThreadFactory.h:40:11 (libep.so+0x3538d3)
|
#18 void std::__invoke_impl<void, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(std::__invoke_other, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/invoke.h:60:14 (libep.so+0x35387d)
|
#19 std::__invoke_result<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>::type std::__invoke<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/invoke.h:95:14 (libep.so+0x3537ed)
|
#20 decltype(std::__invoke(_S_declval<0ul>())) std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:234:13 (libep.so+0x3537b5)
|
#21 std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:243:11 (libep.so+0x353775)
|
#22 std::thread::_State_impl<std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:186:13 (libep.so+0x3535f9)
|
#23 execute_native_thread_routine /tmp/deploy/objdir/../gcc-7.3.0/libstdc++-v3/src/c++11/thread.cc:83 (libstdc++.so.6+0xb995e)
|
|
Previous atomic write of size 4 at 0x7fdfb95d70d8 by thread T9:
|
#0 __tsan_atomic32_compare_exchange_strong <null> (ep_testsuite_dcp+0x4f1bca)
|
#1 std::__atomic_base<unsigned int>::compare_exchange_strong(unsigned int&, unsigned int, std::memory_order, std::memory_order) /usr/local/include/c++/7.3.0/bits/atomic_base.h:477 (libep.so+0x597d9a)
|
#2 folly::SaturatingSemaphore<true, std::atomic>::postFastWaiterMayBlock() folly/synchronization/SaturatingSemaphore.h:197 (libep.so+0x597d9a)
|
#3 folly::SaturatingSemaphore<true, std::atomic>::post() folly/synchronization/SaturatingSemaphore.h:156 (libep.so+0x597d9a)
|
#4 folly::detail::LifoSemBase<folly::SaturatingSemaphore<true, std::atomic>, std::atomic>::post() folly/synchronization/LifoSem.h:379 (libep.so+0x597d9a)
|
#5 folly::UnboundedBlockingQueue<folly::CPUThreadPoolExecutor::CPUTask>::add(folly::CPUThreadPoolExecutor::CPUTask) folly/executors/task_queue/UnboundedBlockingQueue.h:32 (libep.so+0x59db05)
|
#6 folly::CPUThreadPoolExecutor::add(folly::Function<void ()>, std::chrono::duration<long, std::ratio<1l, 1000l> >, folly::Function<void ()>) folly/executors/CPUThreadPoolExecutor.cpp:175 (libep.so+0x58800e)
|
#7 folly::CPUThreadPoolExecutor::add(folly::Function<void ()>) folly/executors/CPUThreadPoolExecutor.cpp:164 (libep.so+0x5875a9)
|
#8 FollyExecutorPool::TaskProxy::~TaskProxy() /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:76:17 (libep.so+0x35f2d8)
|
#9 void __gnu_cxx::new_allocator<FollyExecutorPool::TaskProxy>::destroy<FollyExecutorPool::TaskProxy>(FollyExecutorPool::TaskProxy*) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/ext/new_allocator.h:140:28 (libep.so+0x35fe2d)
|
#10 void std::allocator_traits<std::allocator<FollyExecutorPool::TaskProxy> >::destroy<FollyExecutorPool::TaskProxy>(std::allocator<FollyExecutorPool::TaskProxy>&, FollyExecutorPool::TaskProxy*) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/alloc_traits.h:487:8 (libep.so+0x35fdce)
|
#11 std::_Sp_counted_ptr_inplace<FollyExecutorPool::TaskProxy, std::allocator<FollyExecutorPool::TaskProxy>, (__gnu_cxx::_Lock_policy)2>::_M_dispose() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:535:2 (libep.so+0x35efbf)
|
#12 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:154:6 (ep_testsuite_dcp+0x553d7c)
|
#13 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:684:11 (ep_testsuite_dcp+0x553d42)
|
#14 std::__shared_ptr<FollyExecutorPool::TaskProxy, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/shared_ptr_base.h:1123:31 (libep.so+0x355bf9)
|
#15 FollyExecutorPool::TaskProxy::scheduleViaCPUPool()::'lambda'()::operator()() const::'lambda'()::~() /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:195:21 (libep.so+0x358785)
|
#16 unsigned long folly::detail::function::execSmall<FollyExecutorPool::TaskProxy::scheduleViaCPUPool()::'lambda'()::operator()() const::'lambda'()>(folly::detail::function::Op, folly::detail::function::Data*, folly::detail::function::Data*) folly/Function.h:592:59 (libep.so+0x358969)
|
#17 folly::Function<void ()>::exec(folly::detail::function::Op, folly::detail::function::Data*, folly::detail::function::Data*) const folly/Function.h:649 (libep.so+0x5cd80a)
|
#18 folly::Function<void ()>::~Function() folly/Function.h:781 (libep.so+0x5cd80a)
|
#19 folly::NotificationQueue<folly::Function<void ()> >::Node::~Node() folly/io/async/NotificationQueue.h:70 (libep.so+0x5cd80a)
|
#20 std::default_delete<folly::NotificationQueue<folly::Function<void ()> >::Node>::operator()(folly::NotificationQueue<folly::Function<void ()> >::Node*) const /usr/local/include/c++/7.3.0/bits/unique_ptr.h:78 (libep.so+0x5cd80a)
|
#21 std::unique_ptr<folly::NotificationQueue<folly::Function<void ()> >::Node, std::default_delete<folly::NotificationQueue<folly::Function<void ()> >::Node> >::reset(folly::NotificationQueue<folly::Function<void ()> >::Node*) /usr/local/include/c++/7.3.0/bits/unique_ptr.h:376 (libep.so+0x5cd80a)
|
#22 folly::NotificationQueue<folly::Function<void ()> >::Consumer::consumeMessages(bool, unsigned long*) folly/io/async/NotificationQueue.h:733 (libep.so+0x5cd80a)
|
#23 folly::NotificationQueue<folly::Function<void ()> >::Consumer::handlerReady(unsigned short) folly/io/async/NotificationQueue.h:663 (libep.so+0x5cdb09)
|
#24 folly::EventHandler::libeventCallback(int, short, void*) folly/io/async/EventHandler.cpp:158 (libep.so+0x5d20e0)
|
#25 event_persist_closure /home/couchbase/jenkins/workspace/cbdeps-platform-build-old/deps/packages/build/libevent/libevent-prefix/src/libevent/event.c:1629 (libevent_core-2.1.so.7+0x17f39)
|
#26 event_process_active_single_queue.isra.31 /home/couchbase/jenkins/workspace/cbdeps-platform-build-old/deps/packages/build/libevent/libevent-prefix/src/libevent/event.c:1688 (libevent_core-2.1.so.7+0x17f39)
|
#27 folly::EventBase::loopBody(int, bool) folly/io/async/EventBase.cpp:397 (libep.so+0x5c3e3a)
|
#28 folly::EventBase::loop() folly/io/async/EventBase.cpp:315 (libep.so+0x5c430f)
|
#29 folly::EventBase::loopForever() folly/io/async/EventBase.cpp:538 (libep.so+0x5c60c7)
|
#30 folly::IOThreadPoolExecutor::threadRun(std::shared_ptr<folly::ThreadPoolExecutor::Thread>) folly/executors/IOThreadPoolExecutor.cpp:195 (libep.so+0x5a6ee8)
|
#31 void std::__invoke_impl<void, void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>(std::__invoke_memfun_deref, void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&) /usr/local/include/c++/7.3.0/bits/invoke.h:73 (libep.so+0x5babab)
|
#32 std::__invoke_result<void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>::type std::__invoke<void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>(void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&) /usr/local/include/c++/7.3.0/bits/invoke.h:95 (libep.so+0x5babab)
|
#33 void std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)>::__call<void, 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/local/include/c++/7.3.0/functional:467 (libep.so+0x5babab)
|
#34 void std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)>::operator()<void>() /usr/local/include/c++/7.3.0/functional:551 (libep.so+0x5babab)
|
#35 void folly::detail::function::FunctionTraits<void ()>::callBig<std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)> >(folly::detail::function::Data&) folly/Function.h:401 (libep.so+0x5babab)
|
#36 folly::detail::function::FunctionTraits<void ()>::operator()() folly/Function.h:416:12 (libep.so+0x35390c)
|
#37 folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()::operator()() folly/executors/thread_factory/NamedThreadFactory.h:40:11 (libep.so+0x3538d3)
|
#38 void std::__invoke_impl<void, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(std::__invoke_other, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/invoke.h:60:14 (libep.so+0x35387d)
|
#39 std::__invoke_result<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>::type std::__invoke<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/invoke.h:95:14 (libep.so+0x3537ed)
|
#40 decltype(std::__invoke(_S_declval<0ul>())) std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:234:13 (libep.so+0x3537b5)
|
#41 std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:243:11 (libep.so+0x353775)
|
#42 std::thread::_State_impl<std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:186:13 (libep.so+0x3535f9)
|
#43 execute_native_thread_routine /tmp/deploy/objdir/../gcc-7.3.0/libstdc++-v3/src/c++11/thread.cc:83 (libstdc++.so.6+0xb995e)
|
|
Thread T10 'NonIoPool0' (tid=14466, running) created by thread T9 at:
|
#0 pthread_create <null> (ep_testsuite_dcp+0x4a184b)
|
#1 __gthread_create /tmp/deploy/objdir/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:662 (libstdc++.so.6+0xb9c14)
|
#2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /tmp/deploy/objdir/../gcc-7.3.0/libstdc++-v3/src/c++11/thread.cc:163 (libstdc++.so.6+0xb9c14)
|
#3 folly::NamedThreadFactory::newThread(folly::Function<void ()>&&) folly/executors/thread_factory/NamedThreadFactory.h:37:12 (libep.so+0x352902)
|
#4 folly::PriorityThreadFactory::newThread(folly::Function<void ()>&&) folly/executors/thread_factory/PriorityThreadFactory.h:49:22 (libep.so+0x35414d)
|
#5 CBPriorityThreadFactory::newThread(folly::Function<void ()>&&) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:46:38 (libep.so+0x351d31)
|
#6 folly::ThreadPoolExecutor::addThreads(unsigned long) folly/executors/ThreadPoolExecutor.cpp:223 (libep.so+0x5b7f65)
|
#7 folly::ThreadPoolExecutor::ensureActiveThreads() folly/executors/ThreadPoolExecutor.cpp:496 (libep.so+0x5b8ef2)
|
#8 folly::CPUThreadPoolExecutor::add(folly::Function<void ()>, std::chrono::duration<long, std::ratio<1l, 1000l> >, folly::Function<void ()>) folly/executors/CPUThreadPoolExecutor.cpp:177 (libep.so+0x588026)
|
#9 folly::CPUThreadPoolExecutor::add(folly::Function<void ()>) folly/executors/CPUThreadPoolExecutor.cpp:164 (libep.so+0x5875a9)
|
#10 FollyExecutorPool::TaskProxy::scheduleViaCPUPool() /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:138:17 (libep.so+0x350d2c)
|
#11 FollyExecutorPool::TaskProxy::updateTimeoutFromWakeTime() /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:228:13 (libep.so+0x35d521)
|
#12 FollyExecutorPool::State::scheduleTask(FollyExecutorPool&, folly::CPUThreadPoolExecutor&, std::shared_ptr<GlobalTask>) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:326:21 (libep.so+0x35d24d)
|
#13 FollyExecutorPool::schedule(std::shared_ptr<GlobalTask>)::$_7::operator()() const /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:700:16 (libep.so+0x34f238)
|
#14 void folly::detail::function::FunctionTraits<void ()>::callSmall<FollyExecutorPool::schedule(std::shared_ptr<GlobalTask>)::$_7>(folly::detail::function::Data&) folly/Function.h:387:7 (libep.so+0x34f175)
|
#15 folly::detail::function::FunctionTraits<void ()>::operator()() folly/Function.h:416 (libep.so+0x5bed6c)
|
#16 operator() folly/io/async/EventBase.cpp:671 (libep.so+0x5bed6c)
|
#17 void folly::detail::function::FunctionTraits<void ()>::callBig<folly::EventBase::runInEventBaseThreadAndWait(folly::Function<void ()>)::'lambda'()>(folly::detail::function::Data&) folly/Function.h:401 (libep.so+0x5bed6c)
|
#18 folly::detail::function::FunctionTraits<void ()>::operator()() folly/Function.h:416 (libep.so+0x5cd7c2)
|
#19 folly::EventBase::FunctionRunner::messageAvailable(folly::Function<void ()>&&) folly/io/async/EventBase.cpp:137 (libep.so+0x5cd7c2)
|
#20 folly::NotificationQueue<folly::Function<void ()> >::Consumer::consumeMessages(bool, unsigned long*) folly/io/async/NotificationQueue.h:729 (libep.so+0x5cd7c2)
|
#21 folly::NotificationQueue<folly::Function<void ()> >::Consumer::handlerReady(unsigned short) folly/io/async/NotificationQueue.h:663 (libep.so+0x5cdb09)
|
#22 folly::EventHandler::libeventCallback(int, short, void*) folly/io/async/EventHandler.cpp:158 (libep.so+0x5d20e0)
|
#23 event_persist_closure /home/couchbase/jenkins/workspace/cbdeps-platform-build-old/deps/packages/build/libevent/libevent-prefix/src/libevent/event.c:1629 (libevent_core-2.1.so.7+0x17f39)
|
#24 event_process_active_single_queue.isra.31 /home/couchbase/jenkins/workspace/cbdeps-platform-build-old/deps/packages/build/libevent/libevent-prefix/src/libevent/event.c:1688 (libevent_core-2.1.so.7+0x17f39)
|
#25 folly::EventBase::loopBody(int, bool) folly/io/async/EventBase.cpp:397 (libep.so+0x5c3e3a)
|
#26 folly::EventBase::loop() folly/io/async/EventBase.cpp:315 (libep.so+0x5c430f)
|
#27 folly::EventBase::loopForever() folly/io/async/EventBase.cpp:538 (libep.so+0x5c60c7)
|
#28 folly::IOThreadPoolExecutor::threadRun(std::shared_ptr<folly::ThreadPoolExecutor::Thread>) folly/executors/IOThreadPoolExecutor.cpp:195 (libep.so+0x5a6ee8)
|
#29 void std::__invoke_impl<void, void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>(std::__invoke_memfun_deref, void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&) /usr/local/include/c++/7.3.0/bits/invoke.h:73 (libep.so+0x5babab)
|
#30 std::__invoke_result<void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>::type std::__invoke<void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&>(void (folly::ThreadPoolExecutor::*&)(std::shared_ptr<folly::ThreadPoolExecutor::Thread>), folly::ThreadPoolExecutor*&, std::shared_ptr<folly::ThreadPoolExecutor::Thread>&) /usr/local/include/c++/7.3.0/bits/invoke.h:95 (libep.so+0x5babab)
|
#31 void std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)>::__call<void, 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) /usr/local/include/c++/7.3.0/functional:467 (libep.so+0x5babab)
|
#32 void std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)>::operator()<void>() /usr/local/include/c++/7.3.0/functional:551 (libep.so+0x5babab)
|
#33 void folly::detail::function::FunctionTraits<void ()>::callBig<std::_Bind<void (folly::ThreadPoolExecutor::* (folly::ThreadPoolExecutor*, std::shared_ptr<folly::ThreadPoolExecutor::Thread>))(std::shared_ptr<folly::ThreadPoolExecutor::Thread>)> >(folly::detail::function::Data&) folly/Function.h:401 (libep.so+0x5babab)
|
#34 folly::detail::function::FunctionTraits<void ()>::operator()() folly/Function.h:416:12 (libep.so+0x35390c)
|
#35 folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()::operator()() folly/executors/thread_factory/NamedThreadFactory.h:40:11 (libep.so+0x3538d3)
|
#36 void std::__invoke_impl<void, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(std::__invoke_other, folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/invoke.h:60:14 (libep.so+0x35387d)
|
#37 std::__invoke_result<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>::type std::__invoke<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()>(folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/invoke.h:95:14 (libep.so+0x3537ed)
|
#38 decltype(std::__invoke(_S_declval<0ul>())) std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:234:13 (libep.so+0x3537b5)
|
#39 std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:243:11 (libep.so+0x353775)
|
#40 std::thread::_State_impl<std::thread::_Invoker<std::tuple<folly::NamedThreadFactory::newThread(folly::Function<void ()>&&)::'lambda'()> > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/thread:186:13 (libep.so+0x3535f9)
|
#41 execute_native_thread_routine /tmp/deploy/objdir/../gcc-7.3.0/libstdc++-v3/src/c++11/thread.cc:83 (libstdc++.so.6+0xb995e)
|
|
Thread T9 'SchedulerPool0' (tid=14461, running) created by main thread at:
|
#0 pthread_create <null> (ep_testsuite_dcp+0x4a184b)
|
#1 __gthread_create /tmp/deploy/objdir/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:662 (libstdc++.so.6+0xb9c14)
|
#2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /tmp/deploy/objdir/../gcc-7.3.0/libstdc++-v3/src/c++11/thread.cc:163 (libstdc++.so.6+0xb9c14)
|
#3 folly::ThreadPoolExecutor::ensureActiveThreads() folly/executors/ThreadPoolExecutor.cpp:496 (libep.so+0x5b8ef2)
|
#4 folly::IOThreadPoolExecutor::getEventBase() folly/executors/IOThreadPoolExecutor.cpp:155 (libep.so+0x5a79f2)
|
#5 FollyExecutorPool::registerTaskable(Taskable&) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/folly_executorpool.cc:605:17 (libep.so+0x34c4a4)
|
#6 KVBucket::KVBucket(EventuallyPersistentEngine&) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/kv_bucket.cc:323:26 (libep.so+0x38c72d)
|
#7 EphemeralBucket::EphemeralBucket(EventuallyPersistentEngine&) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/ephemeral_bucket.cc:96:7 (libep.so+0x32bf17)
|
#8 std::_MakeUniq<EphemeralBucket>::__single_object std::make_unique<EphemeralBucket, EventuallyPersistentEngine&>(EventuallyPersistentEngine&) /usr/bin/../lib/gcc/x86_64-linux-gnu/7.3.0/../../../../include/c++/7.3.0/bits/unique_ptr.h:825:34 (libep.so+0x2f7154)
|
#9 EventuallyPersistentEngine::makeBucket(Configuration&) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/ep_engine.cc:6539:16 (libep.so+0x2e0553)
|
#10 EventuallyPersistentEngine::initialize(char const*) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/engines/ep/src/ep_engine.cc:2247:16 (libep.so+0x2dffc9)
|
#11 MockTestHarness::create_bucket(bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/programs/engine_testapp/engine_testapp.cc:212:52 (ep_testsuite_dcp+0x55d227)
|
#12 execute_test(test, char const*, char const*) /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/programs/engine_testapp/engine_testapp.cc:366:43 (ep_testsuite_dcp+0x55c1c5)
|
#13 main /home/couchbase/jenkins/workspace/kv_engine.threadsanitizer_master/build/../kv_engine/programs/engine_testapp/engine_testapp.cc:629:37 (ep_testsuite_dcp+0x55b64b)
|
|
SUMMARY: ThreadSanitizer: data race /usr/local/include/c++/7.3.0/bits/atomic_base.h:256 in std::__atomic_base<unsigned int>::__atomic_base(unsigned int)
|
Attachments
Issue Links
- blocks
-
MB-36956 Migrate to Facebook Folly executors for CPU & IO background tasks
- Closed
- causes
-
MB-41309 TSan: false-positive data race in ExecutorPoolTest/1.increase_workers (FollyExecutorPool)
- Resolved
- relates to
-
MB-41896 ThreadSanitizer CHECK failed: sanitizer_deadlock_detector1.cc:166 "((!dd.isHeld(<->dd, m->id))) != (0)" (0x0, 0x0)
- Closed
-
MB-41988 tlm install_sanitizer_library() finds wrong version of TSan under clang
- Closed
(1 mentioned in)