[omniORB] Access violation in giopRendezvouser::execute() after ORB->destroy()

Dietmar May dcmay at dmis.com
Mon Mar 20 15:57:04 GMT 2006


My application is making these calls, using omniORB 4.0.7 under Windows 
2000:

  CORBA::ORB->shutdown(1);
  omni_thread::join();  //wait for ORB->run() thread to end
  CORBA::ORB->destroy();

The first two complete successfully. During the call to destroy(), the 
application pauses for a few seconds, then an access violation occurs.

This occurs during a call to giopRendezvouser::execute(), and is due to 
omniORB's use of an already deleted pd_server object, by calling the 
pd_server->notifyRzDone() method (which is the last line in the 
execute() function). The pointer values looks like it was valid at one 
time (and it was used successfully in the execute() function earlier 
without crashing); but at the time of the access violation, the vtable 
is (already re)set to garbage, as are the other members of the pd_server 
object.

The application needs to destroy the ORB because a subsequent call will 
be made to ORB::init(). However, at the time of the access violation, 
the second call to ORB::init() does not appear to have occurred (and 
shouldn't have), so this doesn't seem to be due to re-initializing the 
ORB during shutdown() or destroy().

The call stack for the ORB::destroy() thread is:

omniAsyncInvoker::~omniAsyncInvoker()
omni::ORBAsyncInvoker::~ORBAsyncInvoker()
omni::ORBAsyncInvoker::`scalar deleting destructor`
omni::omni_corbaOrb_initialiser::detach()
omniOrbORB::destroy()
// ... application code calling ORB->destroy () ...

The call stack for the crashing giopRendezvouser::execute() method is:

omni_mutex_lock::omni_mutex_lock() //mutex 'this' is garbage
omni::giopServer::notifyRzDone()   //giopServer 'this' is garbage
omni::giopRendezvouser::execute()  //everything in 'this' looks OK 
except pd_server
omniAsyncWorker::real_run()
omniAsyncWorkerInfo::run()
omniAsyncWorker::run()
omni_thread_wrapper()

Are there any known issues with calling ORB::destroy()? Is there 
anything obviously wrong with the calls my app is making?

Thanks,
Dietmar May



More information about the omniORB-list mailing list