[omniORB] thread mutex deadlock in omniOrbPOA::destroy

Michael Pronath michael.pronath at gmx.de
Wed Sep 23 10:32:02 UTC 2020


Hi,

it seems to be possible (happened here but probably a rare case) that
there's a deadlock between two threads while destroying the POA (exiting
the server).

Two threads' stacktraces of a hanging process in deadlock:

Thread 1 (Thread 0x7f5eb91dc740 (LWP 17375)):
#0  0x00007f5eb62ab54d in __lll_lock_wait () from /lib64/libpthread.so.0
#1  0x00007f5eb62a6e9b in _L_lock_883 () from /lib64/libpthread.so.0
#2  0x00007f5eb62a6d68 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3  0x00007f5eb3d914b5 in omni::SocketCollection::wakeUp() () from libomniORB4.so.2
#4  0x00007f5eb3db6f84 in omni::unixEndpoint::Poke() () from libomniORB4.so.2
#5  0x00007f5eb3d7660c in omni::giopRendezvouser::terminate() () from libomniORB4.so.2
#6  0x00007f5eb3d74768 in omni::giopServer::deactivate() () from libomniORB4.so.2
#7  0x00007f5eb3d754ab in omni::giopServer::stop() () from libomniORB4.so.2
#8  0x00007f5eb3d30881 in omni::omniObjAdapter::adapterInactive() () from libomniORB4.so.2
#9  0x00007f5eb3d4e3f3 in omni::omniOrbPOA::do_destroy(bool) () from libomniORB4.so.2
#10 0x00007f5eb3d4e9dc in omni::omniOrbPOA::destroy(bool, bool) ()


Thread 6 (Thread 0x7f5ea75fe700 (LWP 17422)):
#0  0x00007f5eb62ab54d in __lll_lock_wait () from /lib64/libpthread.so.0
#1  0x00007f5eb62a6e9b in _L_lock_883 () from /lib64/libpthread.so.0
#2  0x00007f5eb62a6d68 in pthread_mutex_lock () from /lib64/libpthread.so.0
#3  0x00007f5eb3d72b6d in omni::giopServer::notifyRzReadable(omni::giopConnection*, bool) ()
#4  0x00007f5eb3db6db4 in omni::unixEndpoint::notifyReadable(omni::SocketHolder*) ()
#5  0x00007f5eb3d91234 in omni::SocketCollection::Select() ()
#6  0x00007f5eb3db6cf4 in omni::unixEndpoint::AcceptAndMonitor(void (*)(void*, omni::giopConnection*), void*)
#7  0x00007f5eb3d76435 in omni::giopRendezvouser::execute() ()
#8  0x00007f5eb3d1e996 in omniAsyncWorker::real_run() ()
#9  0x00007f5eb3d1e5db in omniAsyncWorker::mid_run() ()
#10 0x00007f5eb3d1fa7a in omniAsyncWorker::run(void*) ()
#11 0x00007f5eb35508cd in omni_thread_wrapper ()
#12 0x00007f5eb62a4ea5 in start_thread () from /lib64/libpthread.so.0


Thread 6 locks pd_collection_lock in SocketCollection::Select and then
waits for pd_lock in giopServer::notifyRzReadable

Thread 1 locks pd_lock in giopServer::deactivate and then waits for
pd_collection_lock in SocketCollection::wakeUp



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.omniorb-support.com/pipermail/omniorb-list/attachments/20200923/b07a5a09/attachment.html>


More information about the omniORB-list mailing list