Skip to main content

Problem:

  • Product Name: VisiBroker for C
  • Product Version: All
  • Product Component: Core
  • Platform/OS Version: HP-UX 11.11


Invoking ORB::run() again during the clean up process where the orb is in the midst of executing ORB::shutdown()/destroy() or exit() function call will cause an intermittent core dump at VISProtocolManager::wait_for_shutdown().

ORB::run() is a blocking call and will return to caller"s stack when the ORB::shutdown()/destroy() or exit() is called to do a clean up. The clean up may take a while. The following is a sample stack trace:
#0 0xc7d24c40 in VISProtocolManager::wait_for_shutdown () from /opt/vbroker7.0runtime/lib/liborb_r.sl 
(gdb) bt 
#0 0xc7d24c40 in VISProtocolManager::wait_for_shutdown () from /opt/vbroker7.0runtime/lib/liborb_r.sl 
#1 0xc7c8c0ec in VISORB::run () from /opt/vbroker7.0runtime/lib/liborb_r.sl
 :
The sample code is listed below,
while (true)
 {
   try
   {
      orb->run();
   }
   catch (const CORBA::Exception&)
   {
    // Some exception handling
    break;
   }
 }

Resolution:


ORB::run() function must not be called again when the orb is executing the ORB::shutdown()/destroy() function.
 

#VisiBroker
#Security