[omniORB] omniORB4: LONG Pause during orb->shutdown(0), orb->destroy()

Duncan Grisby dgrisby@uk.research.att.com
Fri, 30 Nov 2001 10:41:17 +0000


On Thursday 29 November, Ken Feuerman wrote:

> Within Process B, the implementation of Destroy() is to set an event.  The 
> main thread waits on this event, deactivates the "DataStream" servant, then 
> calls orb->shutdown(0) and orb->destroy().  The problem is that there's a 
> very long pause in the thread launched by orb->shutdown(0) while it waits 
> to stop serving the incoming endpoints.

You could just call orb->shutdown(0) from within the Destroy()
implementation. Then a thread blocking in orb->run() would wake up,
and could call orb->destroy(). This doesn't have anything to do with
your hang, though.

> I've appended the output from a run of Process B with the trace level set 
> at 15, and (through some debugger hackery) traced locks and unlocks 
> <orb_lock>.  I'm running on Win2000, MSVC 6.0, omniORB snapshot as 
> indicated in the log below.  Any ideas why the hang?

No ideas, I'm afraid. Have you tried the call_back example from the
omniORB distribution?  It'll be useful to know if that hangs or not --
it doesn't for me. If the call_back example doesn't hang, are you able
to construct a minimal example that does exhibit the hang?

Another thing to try is to run with argument -ORBtraceThreadId 1, as
well as -ORBtraceLevel 15. That will add the thread id to all trace
messages, which might make it easier to see what's going on.

Cheers,

Duncan.

-- 
 -- Duncan Grisby  \  Research Engineer  --
  -- AT&T Laboratories Cambridge          --
   -- http://www.uk.research.att.com/~dpg1 --