[omniORB] giopServer pd_state ZOMBIE for RootPOA (when giopServer TIMEDOUT before)

Martin Trappel 0xCDCDCDCD at gmx.at
Tue Aug 5 19:28:06 BST 2008


[omniORB 4.1.2, Windows XP, VC8 prebuilt DLLs]

I have the situation where I repeatedly initialize and destroy the ORB
in a client application, in between creating one new POA from the
RootPOA and doing a few server calls on a server resolved via
NameService. (The reason for this is a multi threaded environment where,
normally, the init+shutdown would occur once - but
can occur an arbitrary number of times for certain usecases.)

I have successfully synchronized ORB_init and the complete shutdown of
the ORB as well as all POAs via a singleton class. (I'm pretty sure
this synchronization is working OK, having sufficient logs to verify
it.)
i.e. my ORB_init(...) is completely synchronized against my
orb_var->shutdown(true) + orb_var->destroy()

Now I face the problem that I hit an omniORB::fatalException reliably,
after a few cycles of init+shutdow. The error occurs in
giopserver.cc(284) where apparently the endpoint object giopServer of
the root POA is in a ZOMBIE state.
284:   OMNIORB_ASSERT(pd_state != ZOMBIE);

The call stack is as follows:
     omniORB412_vc8_rtd.dll!omni::assertFail(const char * file=0x67ca8...
 >   omniORB412_vc8_rtd.dll!omni::giopServer::instantiate(const char *...
     omniORB412_vc8_rtd.dll!omni::instantiate_endpoint(const char * ur...
     omniORB412_vc8_rtd.dll!omni::omniObjAdapter::initialise()  Line 4...
     omniORB412_vc8_rtd.dll!initialise_poa()  Line 2604	C++
     omniORB412_vc8_rtd.dll!omni::omniOrbPOA::rootPOA(int init_if_none...
     omniORB412_vc8_rtd.dll!omni::resolveRootPOAFn()  Line 4159 + 0xa ...
     omniORB412_vc8_rtd.dll!omni::resolvePseudo(const char * id=0x04c7...
     omniORB412_vc8_rtd.dll!omni::omniInitialReferences::resolve(const...
     omniORB412_vc8_rtd.dll!omniOrbORB::resolve_initial_references(con...
     ProcessORB.dll!ProcessORB::CreateNewPOA()  Line 92 + 0x28 bytes	
     CDACIC.dll!CACIClient::InitPOA()  Line 365 + 0x19 bytes	C++
     CDACIC.dll!CACIClient::Init()  Line 56	C++
     ...
	
Under which circumstances would an giopServer endpoint object be left
in the ZOMBIE state? giopServer::remove() will apparently leave the
object in a ZOMBIE state if pd_state is TIMEDOUT. I was able to verify
that if on shutdown the object does not do delete this; because it was
TIMEDOUT, upon the next initialization and call to
resolve_initial_refereces(RootPOA) I get the ZOMBIE error in the
instatiate() method.

It would be helpful if someone could tell me what that that TIMEDOUT
is signifying there in the context of the RootPOA (and maybe how to
reproduce it in a less complicated context for the RootPOA).

any and all pointers and questions welcome!
cheers,
Martin



More information about the omniORB-list mailing list