[omniORB] ORB::shutdown() within DLL at process shutdown on WinNT

Daniel Bell Daniel.Bell@colorbus.com.au
Wed, 22 Nov 2000 14:39:47 +1100


Hi,
	
I am having trouble with processes hanging within ORB::shutdown(), when the
ORB::shutdown() is being called from a DLL at the time of process detachment
on WinNT. A similar problem was reported in
http://www.uk.research.att.com/omniORB/archives/2000-03/0012.html (with no
follow-up).

In particular, I have a singleton class in the DLL which wraps a ORB_var
object, and on destruction of the singleton object, the ORB::shutdown()
function is called. The singleton is destructed at the time that the DLL is
informed of process detachment, and by this time, all the threads in the
process _seem_ to have been killed (without a chance of executing any
cleanup code). The call to ORB::shutdown() blocks because it is waiting for
a worker thread to shutdown (it blocks on a semaphore), and that thread
_appears_ to have already been killed by the operating system. Hence the
process is essentially single threaded by this stage, and is blocked on a
semaphore - a semaphore which will never be signalled.

Is this a bug in omniORB? Or does anyone have any suggestions on how to
avoid this scenario?

Thanks,
Daniel.

- Daniel Bell
- Software Engineer, Colorbus Pty Ltd
- Email: daniel.bell@colorbus.com.au
- Phone: 61 3 8574 8035
- WWW:   http://www.colorbus.com