<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hi,</p>
<p>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).</p>
<p>Two threads' stacktraces of a hanging process in deadlock:<br>
</p>
<pre>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
</pre>
<p><br>
</p>
<p>Thread 6 locks pd_collection_lock in SocketCollection::Select and
then waits for pd_lock in giopServer::notifyRzReadable</p>
<p>Thread 1 locks pd_lock in giopServer::deactivate and then waits
for pd_collection_lock in SocketCollection::wakeUp</p>
<br>
<p><br>
</p>
</body>
</html>