Hello,

I've write a little server which could be summary like this:

void
ONED::CosTransactionsApp::_sighandler( int )
{
    SmartLocker<XRecBool>( _request_shutdown )->value( true );
}


main()
{
    signal( SIGINT  , _sighandler );
    signal( SIGTERM , _sighandler );

    _orb = CORBA::ORB_init( _argc , _argv , "mico-local-orb" );

    CORBA::Object_var       obj = _orb->resolve_initial_references( "RootPOA" );
    PortableServer::POA_var rootPOA = PortableServer::POA::_narrow( obj );
    PortableServer::POAManager_var  mgr = rootPOA->the_POAManager();

    CORBA::PolicyList   pl;
    pl.length(2);
    pl[0] = rootPOA->create_lifespan_policy( PortableServer::PERSISTENT );
    pl[1] = rootPOA->create_id_assignment_policy( PortableServer::USER_ID );
    PortableServer::POA_var factoryPOA = rootPOA->create_POA(
"TransactionService" , mgr , pl );
    PortableServer::POA_var controlPOA = rootPOA->create_POA( "ControlPOA" , mgr
, pl );

    TransactionFactoryImpl* servant =
        new ONED::OTS::TransactionFactoryImpl( controlPOA , _orb );
    PortableServer::ObjectId_var    oid =
        PortableServer::string_to_ObjectId( "TransactionService" );
    factoryPOA->activate_object_with_id( oid , servant );

    mgr->activate();

    bool    quit = false;
    do {
        if ( _orb->work_pending() )
            _orb->perform_work();
        quit = SmartLocker<XRecBool>(_request_shutdown)->value();
    } while ( ! quit );

    std::cerr << "=> Shutdown ...";
    _orb->shutdown( TRUE );
    std::cerr << "[ok]\n";

    return 0;
}


It seems that _orb->shutdown( ) hang up for ever end never return. I've tried
TRUE and FALSE as parameters, but "[ok]" is never printed while "=> Shutdown
..." is printed.

Any idea ?


+--------------------+
+ Laurent Marzullo
+
_______________________________________________
Mico-devel mailing list
[email protected]
http://www.mico.org/mailman/listinfo/mico-devel

Reply via email to