CORBA_ORB_shutdown precondition



Hi,

I am having some difficulty shutting down a server. I have a method kill 
which is supposed to release any held resources and shutdown the server. 
If I call CORBA_ORB_shutdown, nothing happens because init_level == 1 
(src/orb/orb-core/corba-orb.c). If I call CORBA_ORB_destroy, I get an 
exception because there is pending work (as the code is still inside a 
method call) when CORBA_ORB_destroy internally calls CORBA_ORB_shutdown 
with wait for completion TRUE.

If I modify CORBA_ORB_destroy to call CORBA_ORB_shutdown with wait for 
completion FALSE, then I can at least destroy the ORB. But I do get a  
lot of warnings about leaked references, including references to the 
root POA.

If instead I modify the CORBA_ORB_shutdown precondition to be init_level 
 > 1 (instead of init_level == 0), I can exit the linc main loop by 
calling CORBA_ORB_shutdown with wait for completion FALSE and get less 
warnings.

The code seems to behave with omniORB so I suspect the precondition 
CORBA_ORB_shutdown may be wrong. It seems like it should be init_level > 
1 (or maybe init_level == 1 would be safer). Since shutdown gets called 
before destroy, there is one active CORBA_ORB_init when the last call to 
CORBA_ORB_shutdown is made. Am I right, or have I done something daft in 
my client/server code?

PS thanks for the good work on ORBit. For the project I have been 
working on, ORBit is faster and more memory efficient than omniORB.

-- 
Bowie Owens

CSIRO Mathematical & Information Sciences
phone  : +61 3 9545 8055
fax    : +61 3 9545 8080
mobile : 0425 729 875
email  : Bowie.Owens@csiro.au






[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]