<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>