Skip to content

Fix[mqba::AdminSession]: handle in-flight events on teardown - #1676

Merged
678098 merged 2 commits into
bloomberg:mainfrom
678098:260731_mqba_AdminSession_fixes
Aug 3, 2026
Merged

Fix[mqba::AdminSession]: handle in-flight events on teardown#1676
678098 merged 2 commits into
bloomberg:mainfrom
678098:260731_mqba_AdminSession_fixes

Conversation

@678098

@678098 678098 commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator
  • Add a test driver that verifies if concurrent shutdown of mqba::AdminSession is safe with admin commands reaching the broker.
  • Similar to ClientSession, keep the last reference to AdminSession on teardown.

@678098
678098 requested a review from a team as a code owner July 31, 2026 17:43
switch (_testCase) {
case 0:
case 1: test1_watermark(); break;
case 2: test2_safeConcurrentTeardown(); break;

@678098 678098 Jul 31, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fails in main / ASAN

126/209 Test #153: mqba_adminsession.t ..............................***Failed    0.22 sec
[18:59:23] TEST START
[18:59:23] CASE  1: SUCCESS
[18:59:23] CASE  2: FAILURE (rc 1)
TEST /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp CASE 2
=================================================================
==3098==ERROR: AddressSanitizer: heap-use-after-free on address 0x7c9d53fe0ff0 at pc 0x5562a26206a2 bp 0x7b0d519fe3e0 sp 0x7b0d519fe3d8
READ of size 8 at 0x7c9d53fe0ff0 thread T1
    #0 0x5562a26206a1 in BloombergLP::mqbi::DispatcherClient::inDispatcherThread() const /blazingmq/src/groups/mqb/mqbi/mqbi_dispatcher.h:719:17
    #1 0x5562a261aab6 in BloombergLP::mqba::AdminSession::finalizeAdminCommand(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&) /blazingmq/src/groups/mqb/mqba/mqba_adminsession.cpp:195:5
    #2 0x5562a262a07b in void BloombergLP::bdlf::MemFn<void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)>::operator()<BloombergLP::mqba::AdminSession*>(BloombergLP::mqba::AdminSession* const&, BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&) const /opt/bb/include/bdlf_memfn.h:579:16
    #3 0x5562a2629f6d in void BloombergLP::bdlf::Bind_Invoker<void, 3>::invoke<BloombergLP::bdlf::MemFn<void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)> const, BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>> const, BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::MemFn<void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)> const*, BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>> const*, BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:8660:9
    #4 0x5562a2629e7b in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>::invokeImpl<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&, BloombergLP::bslmf::Tag<0u>) const /opt/bb/include/bdlf_bind.h:5950:24
    #5 0x5562a2629d80 in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>::invoke<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:6014:16
    #6 0x5562a2629ce5 in BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>::operator()() const /opt/bb/include/bdlf_bind.h:6023:16
    #7 0x5562a2629bc1 in BloombergLP::bslstl::Function_InvokerUtil_Dispatch<5, void (), BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>>::invoke(BloombergLP::bslstl::Function_Rep const*) /opt/bb/include/bslstl_function_invokerutil.h:967:12
    #8 0x5562a26210ef in BloombergLP::bslstl::Function_Variadic<void ()>::operator()() const /opt/bb/include/bslstl_function.h:1545:12
    #9 0x5562a2c5855a in BloombergLP::mqbmock::Dispatcher::processQueue() /blazingmq/src/groups/mqb/mqbmock/mqbmock_dispatcher.cpp:154:9
    #10 0x5562a246b79c in (anonymous namespace)::QueueProcessor::run() /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:252:29
    #11 0x5562a246d7db in void BloombergLP::bdlf::MemFn<void ((anonymous namespace)::QueueProcessor::*)()>::operator()<(anonymous namespace)::QueueProcessor*>((anonymous namespace)::QueueProcessor* const&) const /opt/bb/include/bdlf_memfn.h:557:16
    #12 0x5562a246d6e8 in void BloombergLP::bdlf::Bind_Invoker<void, 1>::invoke<BloombergLP::bdlf::MemFn<void ((anonymous namespace)::QueueProcessor::*)()> const, BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*> const, BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::MemFn<void ((anonymous namespace)::QueueProcessor::*)()> const*, BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*> const*, BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:8610:9
    #13 0x5562a246d64b in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>::invokeImpl<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&, BloombergLP::bslmf::Tag<0u>) const /opt/bb/include/bdlf_bind.h:5950:24
    #14 0x5562a246d550 in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>::invoke<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:6014:16
    #15 0x5562a246d1a5 in BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>::operator()() const /opt/bb/include/bdlf_bind.h:6023:16
    #16 0x5562a246ccec in BloombergLP::bslmt::EntryPointFunctorAdapter<BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>>::invokerFunction(void*) /opt/bb/include/bslmt_entrypointfunctoradapter.h:324:5
    #17 0x5562a2c0c1d2 in bslmt_EntryPointFunctorAdapter_invoker /blazingmq/deps/srcs/bde/groups/bsl/bslmt/bslmt_entrypointfunctoradapter.cpp:15:5
    #18 0x5562a241d9ba in asan_thread_start(void*) crtstuff.c
    #19 0x7f0d54e7ab83  (/lib/x86_64-linux-gnu/libc.so.6+0x9cb83) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #20 0x7f0d54f07b63 in clone (/lib/x86_64-linux-gnu/libc.so.6+0x129b63) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)

0x7c9d53fe0ff0 is located 112 bytes inside of 1136-byte region [0x7c9d53fe0f80,0x7c9d53fe13f0)
freed by thread T0 here:
    #0 0x5562a241fe1a in free (/blazingmq/cmake.bld/Linux/tests/mqba_adminsession.t+0x441e1a) (BuildId: bdfa8d94e26b8726be70eff0331e796d35f584a8)
    #1 0x5562a29e45af in BloombergLP::bslma::MallocFreeAllocator::deallocate(void*) /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_mallocfreeallocator.h:216:9
    #2 0x5562a2c09b4c in BloombergLP::bslma::TestAllocator::deallocate(void*) /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_testallocator.cpp:731:20
    #3 0x5562a2bfe1db in BloombergLP::bslma::Allocator::do_deallocate(void*, unsigned long, unsigned long) /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_allocator.cpp:100:11
    #4 0x5562a2473f48 in std::__1::pmr::memory_resource::deallocate[abi:ne210107](void*, unsigned long, unsigned long) /blazingmq/deps/srcs/llvm-project/runtimes/cmake.bld/include/c++/v1/__memory_resource/memory_resource.h:42:5
    #5 0x5562a2618a0e in std::__1::pmr::polymorphic_allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>::deallocate[abi:ne210107](BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>*, unsigned long) /blazingmq/deps/srcs/llvm-project/runtimes/cmake.bld/include/c++/v1/__memory_resource/polymorphic_allocator.h:77:13
    #6 0x5562a26189b4 in bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>::deallocate(BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>*, unsigned long) /opt/bb/include/bslma_bslallocator.h:999:11
    #7 0x5562a2618984 in bsl::allocator_traits<bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>>::deallocate(bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>&, BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>*, unsigned long) /opt/bb/include/bslma_bslallocator.h:863:11
    #8 0x5562a26186b3 in BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>::disposeRep() /opt/bb/include/bslstl_sharedptrallocateinplacerep.h:351:5
    #9 0x5562a2c05ba0 in BloombergLP::bslma::SharedPtrRep::releaseRef() /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_sharedptrrep.cpp:52:9
    #10 0x5562a261245e in bsl::shared_ptr<BloombergLP::mqba::AdminSession>::reset() /opt/bb/include/bslstl_sharedptr.h:5279:14
    #11 0x5562a245fe8e in test2_safeConcurrentTeardown() /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:529:17
    #12 0x5562a245c3b0 in main /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:557:17
    #13 0x7f0d54e081c9  (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #14 0x7f0d54e0828a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #15 0x5562a237c7c4 in _start (/blazingmq/cmake.bld/Linux/tests/mqba_adminsession.t+0x39e7c4) (BuildId: bdfa8d94e26b8726be70eff0331e796d35f584a8)

previously allocated by thread T0 here:
    #0 0x5562a24200b8 in malloc (/blazingmq/cmake.bld/Linux/tests/mqba_adminsession.t+0x4420b8) (BuildId: bdfa8d94e26b8726be70eff0331e796d35f584a8)
    #1 0x5562a2bff659 in BloombergLP::bslma::MallocFreeAllocator::allocate(unsigned long) /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_mallocfreeallocator.cpp:112:20
    #2 0x5562a2c08480 in BloombergLP::bslma::TestAllocator::allocate(unsigned long) /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_testallocator.cpp:468:58
    #3 0x5562a2bfddf7 in BloombergLP::bslma::Allocator::do_allocate(unsigned long, unsigned long) /blazingmq/deps/srcs/bde/groups/bsl/bslma/bslma_allocator.cpp:53:22
    #4 0x5562a25484d8 in std::__1::pmr::memory_resource::allocate[abi:ne210107](unsigned long, unsigned long) /blazingmq/deps/srcs/llvm-project/runtimes/cmake.bld/include/c++/v1/__memory_resource/memory_resource.h:37:12
    #5 0x5562a261836d in std::__1::pmr::polymorphic_allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>::allocate[abi:ne210107](unsigned long) /blazingmq/deps/srcs/llvm-project/runtimes/cmake.bld/include/c++/v1/__memory_resource/polymorphic_allocator.h:69:45
    #6 0x5562a26182f0 in bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>::allocate(unsigned long, void const*) /opt/bb/include/bslma_bslallocator.h:992:18
    #7 0x5562a2618250 in bsl::allocator_traits<bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>>::allocate(bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>&, unsigned long) /opt/bb/include/bslma_bslallocator.h:851:18
    #8 0x5562a2617e65 in BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>::makeRep(bsl::allocator<BloombergLP::bslstl::SharedPtrAllocateInplaceRep<BloombergLP::mqba::AdminSession, bsl::allocator<char>>>) /opt/bb/include/bslstl_sharedptrallocateinplacerep.h:332:37
    #9 0x5562a2611f1c in bsl::enable_if<!is_array<BloombergLP::mqba::AdminSession>::value, bsl::shared_ptr<BloombergLP::mqba::AdminSession>>::type bsl::allocate_shared<BloombergLP::mqba::AdminSession, BloombergLP::bslma::Allocator, bsl::shared_ptr<BloombergLP::bmqio::TestChannel>&, BloombergLP::bmqp_ctrlmsg::NegotiationMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&, BloombergLP::mqbmock::Dispatcher*, BloombergLP::bdlcc::SharedObjectPool<BloombergLP::bdlbb::Blob, bsl::function<void (void*, BloombergLP::bslma::Allocator*)>, BloombergLP::bdlcc::ObjectPoolFunctors::RemoveAll<BloombergLP::bdlbb::Blob>>*, BloombergLP::bdlmt::EventScheduler*, bsl::function<void (bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&, bsl::function<void (int, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)> const&, bool)>&>(BloombergLP::bslma::Allocator*, bsl::shared_ptr<BloombergLP::bmqio::TestChannel>&, BloombergLP::bmqp_ctrlmsg::NegotiationMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&, BloombergLP::mqbmock::Dispatcher*&&, BloombergLP::bdlcc::SharedObjectPool<BloombergLP::bdlbb::Blob, bsl::function<void (void*, BloombergLP::bslma::Allocator*)>, BloombergLP::bdlcc::ObjectPoolFunctors::RemoveAll<BloombergLP::bdlbb::Blob>>*&&, BloombergLP::bdlmt::EventScheduler*&&, bsl::function<void (bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&, bsl::function<void (int, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)> const&, bool)>&) /opt/bb/include/bslstl_sharedptr.h:6627:28
    #10 0x5562a245fcb4 in test2_safeConcurrentTeardown() /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:502:13
    #11 0x5562a245c3b0 in main /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:557:17
    #12 0x7f0d54e081c9  (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #13 0x7f0d54e0828a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #14 0x5562a237c7c4 in _start (/blazingmq/cmake.bld/Linux/tests/mqba_adminsession.t+0x39e7c4) (BuildId: bdfa8d94e26b8726be70eff0331e796d35f584a8)

Thread T1 created by T0 here:
    #0 0x5562a24040b5 in pthread_create (/blazingmq/cmake.bld/Linux/tests/mqba_adminsession.t+0x4[260](https://github.com/bloomberg/blazingmq/actions/runs/30652291166/job/91238796214?pr=1676#step:5:261)b5) (BuildId: bdfa8d94e26b8726be70eff0331e796d35f584a8)
    #1 0x5562a2c16c82 in BloombergLP::bslmt::ThreadUtilImpl<BloombergLP::bslmt::Platform::PosixThreads>::create(unsigned long*, BloombergLP::bslmt::ThreadAttributes const&, void* (*)(void*), void*) /blazingmq/deps/srcs/bde/groups/bsl/bslmt/bslmt_threadutilimpl_pthread.cpp:231:10
    #2 0x5562a[261](https://github.com/bloomberg/blazingmq/actions/runs/30652291166/job/91238796214?pr=1676#step:5:262)26cb in BloombergLP::bslmt::ThreadUtilImpl<BloombergLP::bslmt::Platform::PosixThreads>::create(unsigned long*, void* (*)(void*), void*) /opt/bb/include/bslmt_threadutilimpl_pthread.h:381:12
    #3 0x5562a246ba6e in int BloombergLP::bslmt::ThreadUtil::createWithAllocator<BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>>(unsigned long*, BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>> const&, BloombergLP::bslma::Allocator*) /opt/bb/include/bslmt_threadutil.h:892:14
    #4 0x5562a246b48c in int BloombergLP::bslmt::ThreadUtil::create<BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>>(unsigned long*, BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>> const&) /opt/bb/include/bslmt_threadutil.h:803:12
    #5 0x5562a246a5ef in (anonymous namespace)::QueueProcessor::start() /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:241:18
    #6 0x5562a245f2e9 in test2_safeConcurrentTeardown() /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:460:15
    #7 0x5562a245c3b0 in main /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:557:17
    #8 0x7f0d54e081c9  (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #9 0x7f0d54e0828a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #10 0x5562a237c7c4 in _start (/blazingmq/cmake.bld/Linux/tests/mqba_adminsession.t+0x39e7c4) (BuildId: bdfa8d94e26b8726be70eff0331e796d35f584a8)

SUMMARY: AddressSanitizer: heap-use-after-free /blazingmq/src/groups/mqb/mqbi/mqbi_dispatcher.h:719:17 in BloombergLP::mqbi::DispatcherClient::inDispatcherThread() const
Shadow bytes around the buggy address:
  0x7c9d53fe0d00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe0d80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe0e00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe0e80: fd fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa
  0x7c9d53fe0f00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x7c9d53fe0f80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd[fd]fd
  0x7c9d53fe1000: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe1080: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe1100: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe1180: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c9d53fe1200: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==3098==ABORTING

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

UBSAN is also not happy about this

126/209 Test #153: mqba_adminsession.t ..............................***Failed    0.29 sec
[19:18:51] TEST START
[19:18:51] CASE  1: SUCCESS
[19:18:51] CASE  2: FAILURE (rc 1)
TEST /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp CASE 2
/blazingmq/src/groups/bmq/bmqp/bmqp_schemaeventbuilder.h:241:5: runtime error: member call on misaligned address 0xa5a5a5a5a5a5a5a5 for type 'BloombergLP::bdlbb::Blob', which requires 8 byte alignment
0xa5a5a5a5a5a5a5a5: note: pointer points here
<memory cannot be printed>
    #0 0x555c22aa6408 in int BloombergLP::bmqp::SchemaEventBuilder::setMessage<BloombergLP::bmqp_ctrlmsg::ControlMessage>(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, BloombergLP::bmqp::EventType::Enum) /blazingmq/src/groups/bmq/bmqp/bmqp_schemaeventbuilder.h:241:5
    #1 0x555c22c97d78 in BloombergLP::mqba::AdminSession::finalizeAdminCommand(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&) /blazingmq/src/groups/mqb/mqba/mqba_adminsession.cpp:211:43
    #2 0x555c22ca901e in void BloombergLP::bdlf::MemFn<void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)>::operator()<BloombergLP::mqba::AdminSession*>(BloombergLP::mqba::AdminSession* const&, BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&) const /opt/bb/include/bdlf_memfn.h:579:16
    #3 0x555c22ca8dde in void BloombergLP::bdlf::Bind_Invoker<void, 3>::invoke<BloombergLP::bdlf::MemFn<void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)> const, BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>> const, BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::MemFn<void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&)> const*, BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>> const*, BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:8660:9
    #4 0x555c22ca8a51 in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>::invokeImpl<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&, BloombergLP::bslmf::Tag<0u>) const /opt/bb/include/bdlf_bind.h:5950:24
    #5 0x555c22ca897e in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>::invoke<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:6014:16
    #6 0x555c22ca88f1 in BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>::operator()() const /opt/bb/include/bdlf_bind.h:6023:16
    #7 0x555c22ca880a in BloombergLP::bslstl::Function_InvokerUtil_Dispatch<5, void (), BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void (BloombergLP::mqba::AdminSession::*)(BloombergLP::bmqp_ctrlmsg::ControlMessage const&, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>> const&), BloombergLP::bdlf::Bind_BoundTuple3<BloombergLP::mqba::AdminSession*, BloombergLP::bmqp_ctrlmsg::ControlMessage, bsl::basic_string<char, std::__1::char_traits<char>, bsl::allocator<char>>>>>::invoke(BloombergLP::bslstl::Function_Rep const*) /opt/bb/include/bslstl_function_invokerutil.h:967:12
    #8 0x555c22c9c9ce in BloombergLP::bslstl::Function_Variadic<void ()>::operator()() const /opt/bb/include/bslstl_function.h:1545:12
    #9 0x555c2331b023 in BloombergLP::mqbmock::Dispatcher::processQueue() /blazingmq/src/groups/mqb/mqbmock/mqbmock_dispatcher.cpp:154:9
    #10 0x555c22a9820c in (anonymous namespace)::QueueProcessor::run() /blazingmq/src/groups/mqb/mqba/mqba_adminsession.t.cpp:252:29
    #11 0x555c22a99ce6 in void BloombergLP::bdlf::MemFn<void ((anonymous namespace)::QueueProcessor::*)()>::operator()<(anonymous namespace)::QueueProcessor*>((anonymous namespace)::QueueProcessor* const&) const /opt/bb/include/bdlf_memfn.h:557:16
    #12 0x555c22a99b20 in void BloombergLP::bdlf::Bind_Invoker<void, 1>::invoke<BloombergLP::bdlf::MemFn<void ((anonymous namespace)::QueueProcessor::*)()> const, BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*> const, BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::MemFn<void ((anonymous namespace)::QueueProcessor::*)()> const*, BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*> const*, BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:8610:9
    #13 0x555c22a999b1 in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>::invokeImpl<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&, BloombergLP::bslmf::Tag<0u>) const /opt/bb/include/bdlf_bind.h:5950:24
    #14 0x555c22a998de in void BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>::invoke<BloombergLP::bdlf::Bind_ArgTuple0>(BloombergLP::bdlf::Bind_ArgTuple0&) const /opt/bb/include/bdlf_bind.h:6014:16
    #15 0x555c22a99621 in BloombergLP::bdlf::Bind_ImplExplicit<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>::operator()() const /opt/bb/include/bdlf_bind.h:6023:16
    #16 0x555c22a992f0 in BloombergLP::bslmt::EntryPointFunctorAdapter<BloombergLP::bdlf::Bind<BloombergLP::bslmf::Nil, void ((anonymous namespace)::QueueProcessor::*)(), BloombergLP::bdlf::Bind_BoundTuple1<(anonymous namespace)::QueueProcessor*>>>::invokerFunction(void*) /opt/bb/include/bslmt_entrypointfunctoradapter.h:324:5
    #17 0x555c232d927a in bslmt_EntryPointFunctorAdapter_invoker /blazingmq/deps/srcs/bde/groups/bsl/bslmt/bslmt_entrypointfunctoradapter.cpp:15:5
    #18 0x7f4ea2b3db83  (/lib/x86_64-linux-gnu/libc.so.6+0x9cb83) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)
    #19 0x7f4ea2bcab63 in clone (/lib/x86_64-linux-gnu/libc.so.6+0x129b63) (BuildId: 328820b908de8ea1ef79afa8995e302e819163d7)

SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /blazingmq/src/groups/bmq/bmqp/bmqp_schemaeventbuilder.h:241:5 

@678098 678098 changed the title UT[mqba::AdminSession]: add UT for concurrent shutdown Fix[mqba::AdminSession]: handle in-flight events on teardown Jul 31, 2026
@678098
678098 requested a review from dorjesinpo July 31, 2026 23:00
678098 added 2 commits August 3, 2026 11:39
Add a test driver that verifies that concurrent shutdown of mqba::AdminSession
is safe with admin commands reaching the broker.

Signed-off-by: Evgeny Malygin <emalygin@bloomberg.net>
Signed-off-by: Evgeny Malygin <emalygin@bloomberg.net>
@678098
678098 force-pushed the 260731_mqba_AdminSession_fixes branch from 57ec165 to 78c8909 Compare August 3, 2026 15:39

@dorjesinpo dorjesinpo left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you

@dorjesinpo dorjesinpo assigned 678098 and unassigned dorjesinpo Aug 3, 2026
@678098
678098 merged commit 0166ec1 into bloomberg:main Aug 3, 2026
53 checks passed
@678098
678098 deleted the 260731_mqba_AdminSession_fixes branch August 3, 2026 18:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants