[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