We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Title: TSAN report: Data race in AccessLogFileImpl::write_lock_
Description: Our Tsan test has data race warning
WARNING: ThreadSanitizer: data race (pid=708734) Atomic write of size 4 at 0x7fed3cd9d150 by main thread: #0 __tsan_atomic32_fetch_add <null> (envoy+0x38b889) #1 absl::synchronization_internal::Waiter::Post() <null> (envoy+0x42bb0c2) #2 AbslInternalPerThreadSemPost <null> (envoy+0x42b9bf0) #3 absl::synchronization_internal::PerThreadSem::Post(absl::base_internal::ThreadIdentity*) <null> (envoy+0x42b53e8) #4 absl::Mutex::IncrementSynchSem(absl::Mutex*, absl::base_internal::PerThreadSynch*) <null> (envoy+0x42b462c) #5 absl::Mutex::Wakeup(absl::base_internal::PerThreadSynch*) <null> (envoy+0x429780d) #6 absl::Mutex::UnlockSlow(absl::SynchWaitParams*) <null> (envoy+0x429fde2) #7 absl::Mutex::Unlock() <null> (envoy+0x42a79e3) #8 Envoy::Thread::MutexBasicLockable::unlock() <null> (envoy+0x834aff) #9 Envoy::Thread::LockGuard::~LockGuard() <null> (envoy+0x11e8e82) #10 Envoy::AccessLog::AccessLogFileImpl::~AccessLogFileImpl() <null> (envoy+0x1262d7e) #11 void __gnu_cxx::new_allocator<Envoy::AccessLog::AccessLogFileImpl>::destroy<Envoy::AccessLog::AccessLogFileImpl>(Envoy::AccessLog::AccessLogFileImp l*) <null> (envoy+0x126f52a) #12 void std::allocator_traits<std::allocator<Envoy::AccessLog::AccessLogFileImpl> >::destroy<Envoy::AccessLog::AccessLogFileImpl>(std::allocator<Envoy ::AccessLog::AccessLogFileImpl>&, Envoy::AccessLog::AccessLogFileImpl*) <null> (envoy+0x126f47b) #13 std::_Sp_counted_ptr_inplace<Envoy::AccessLog::AccessLogFileImpl, std::allocator<Envoy::AccessLog::AccessLogFileImpl>, (__gnu_cxx::_Lock_policy)2>: :_M_dispose() <null> (envoy+0x126f122) #14 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() <null> (envoy+0x3d14f0) #15 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() <null> (envoy+0x3d13b8) #16 std::__shared_ptr<Envoy::AccessLog::AccessLogFile, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() <null> (envoy+0x1269542) #17 std::shared_ptr<Envoy::AccessLog::AccessLogFile>::~shared_ptr() <null> (envoy+0x126835b) #18 Envoy::Extensions::AccessLoggers::File::FileAccessLog::~FileAccessLog() <null> (envoy+0x1d9cb37) #19 Envoy::Extensions::AccessLoggers::File::FileAccessLog::~FileAccessLog() <null> (envoy+0x1d9cb7f) #20 std::_Sp_counted_ptr<Envoy::Extensions::AccessLoggers::File::FileAccessLog*, (__gnu_cxx::_Lock_policy)2>::_M_dispose() <null> (envoy+0x1c851e8) #21 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release() <null> (envoy+0x3d14f0) #22 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count() <null> (envoy+0x3d13b8) #23 std::__shared_ptr<Envoy::AccessLog::Instance, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr() <null> (envoy+0x52a7b2) #24 std::shared_ptr<Envoy::AccessLog::Instance>::~shared_ptr() <null> (envoy+0x528d1b) #25 void __gnu_cxx::new_allocator<std::_List_node<std::shared_ptr<Envoy::AccessLog::Instance> > >::destroy<std::shared_ptr<Envoy::AccessLog::Instance> >(std::shared_ptr<Envoy::AccessLog::Instance>*) <null> (envoy+0xc058f4) #26 void std::allocator_traits<std::allocator<std::_List_node<std::shared_ptr<Envoy::AccessLog::Instance> > > >::destroy<std::shared_ptr<Envoy::AccessL og::Instance> >(std::allocator<std::_List_node<std::shared_ptr<Envoy::AccessLog::Instance> > >&, std::shared_ptr<Envoy::AccessLog::Instance>*) <null> (envo y+0xc057eb) #27 std::__cxx11::_List_base<std::shared_ptr<Envoy::AccessLog::Instance>, std::allocator<std::shared_ptr<Envoy::AccessLog::Instance> > >::_M_clear() <n ull> (envoy+0xc056f0) #28 std::__cxx11::_List_base<std::shared_ptr<Envoy::AccessLog::Instance>, std::allocator<std::shared_ptr<Envoy::AccessLog::Instance> > >::~_List_base() <null> (envoy+0xc0562f) #29 std::__cxx11::list<std::shared_ptr<Envoy::AccessLog::Instance>, std::allocator<std::shared_ptr<Envoy::AccessLog::Instance> > >::~list() <null> (env oy+0xc041ab) #30 Envoy::Server::AdminImpl::~AdminImpl() <null> (envoy+0x1c78753) #31 Envoy::Server::AdminImpl::~AdminImpl() <null> (envoy+0x1c787ff) #32 std::default_delete<Envoy::Server::AdminImpl>::operator()(Envoy::Server::AdminImpl*) const <null> (envoy+0x11a7c26) #33 std::unique_ptr<Envoy::Server::AdminImpl, std::default_delete<Envoy::Server::AdminImpl> >::~unique_ptr() <null> (envoy+0x1195c13) #34 Envoy::Server::InstanceImpl::~InstanceImpl() <null> (envoy+0x117f9b9) #35 std::default_delete<Envoy::Server::InstanceImpl>::operator()(Envoy::Server::InstanceImpl*) const <null> (envoy+0x838906) #36 std::unique_ptr<Envoy::Server::InstanceImpl, std::default_delete<Envoy::Server::InstanceImpl> >::~unique_ptr() <null> (envoy+0x831403) #37 Envoy::MainCommonBase::~MainCommonBase() <null> (envoy+0x83a479) #38 Envoy::MainCommon::~MainCommon() <null> (envoy+0x83a3b9) #39 std::default_delete<Envoy::MainCommon>::operator()(Envoy::MainCommon*) const <null> (envoy+0x83a296) #40 std::unique_ptr<Envoy::MainCommon, std::default_delete<Envoy::MainCommon> >::~unique_ptr() <null> (envoy+0x8334e3) #41 Envoy::MainCommon::main(int, char**, std::function<void (Envoy::Server::Instance&)>) <null> (envoy+0x82eaee) #42 main <null> (envoy+0x82acd5) Previous write of size 8 at 0x7fed3cd9d150 by thread T9: #0 mmap <null> (envoy+0x36fa3a) #1 absl::base_internal::DoAllocWithArena(unsigned long, absl::base_internal::LowLevelAlloc::Arena*) <null> (envoy+0x42dd4d6) #2 absl::base_internal::LowLevelAlloc::Alloc(unsigned long) <null> (envoy+0x434cbc4) #3 absl::synchronization_internal::NewThreadIdentity() <null> (envoy+0x42b9129) #4 absl::synchronization_internal::CreateThreadIdentity() <null> (envoy+0x42b9005) #5 absl::synchronization_internal::GetOrCreateCurrentThreadIdentity() <null> (envoy+0x42b5316) #6 absl::Synch_GetPerThread() <null> (envoy+0x42b14f5) #7 absl::Synch_GetPerThreadAnnotated(absl::Mutex*) <null> (envoy+0x429bb14) #8 absl::CondVar::WaitCommon(absl::Mutex*, absl::synchronization_internal::KernelTimeout) <null> (envoy+0x42ace85) #9 absl::CondVar::Wait(absl::Mutex*) <null> (envoy+0x42ad402) #10 Envoy::Thread::CondVar::wait(Envoy::Thread::MutexBasicLockable&) <null> (envoy+0x126764f) #11 Envoy::AccessLog::AccessLogFileImpl::flushThreadFunc() <null> (envoy+0x1263df9) #12 Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1::operator()() const <null> (envoy+0x126666b) #13 void std::__invoke_impl<void, Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1&>(std::__invoke_other, Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1&) <null> (envoy+0x12665f0) #14 std::enable_if<is_invocable_r_v<void, Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1&>, void>::type std::__invoke_r<void, Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1&>(Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1&) <null> (envoy+0x1266540) #15 std::_Function_handler<void (), Envoy::AccessLog::AccessLogFileImpl::createFlushStructures()::$_1>::_M_invoke(std::_Any_data const&) <null> (envoy+0x126636a) #16 std::function<void ()>::operator()() const <null> (envoy+0x532ec6) #17 Envoy::Thread::ThreadImplPosix::ThreadImplPosix(std::function<void ()>, std::optional<Envoy::Thread::Options> const&)::'lambda'(void*)::operator()(void*) const <null> (envoy+0x2da9a3b) #18 Envoy::Thread::ThreadImplPosix::ThreadImplPosix(std::function<void ()>, std::optional<Envoy::Thread::Options> const&)::'lambda'(void*)::__invoke(void*) <null> (envoy+0x2da99c8)
By looking at the code, it seems the race is inside mutex write_lock_.
Main thread is at write_lock_ destructor of here
AccessLogFlush thread is here
The text was updated successfully, but these errors were encountered:
This is an issue in TSAN itself. See #12600
Sorry, something went wrong.
It turns out it is tsan issue: google/sanitizers#953
No branches or pull requests
Title: TSAN report: Data race in AccessLogFileImpl::write_lock_
Description:
Our Tsan test has data race warning
By looking at the code, it seems the race is inside mutex write_lock_.
Main thread is at write_lock_ destructor of here
AccessLogFlush thread is here
The text was updated successfully, but these errors were encountered: