示例#1
0
void
TAO_Thread_Lane_Resources::shutdown_reactor (void)
{
    TAO_Leader_Follower &leader_follower = this->leader_follower ();

    ACE_GUARD (TAO_SYNCH_MUTEX,
               ace_mon,
               leader_follower.lock ());

    ACE_Reactor *reactor = leader_follower.reactor ();

    // Wakeup all the threads waiting blocked in the event loop, this
    // does not guarantee that they will all go away, but reduces the
    // load on the POA....

    // If there are some client threads running we have to wait until
    // they finish, when the last one does it will shutdown the reactor
    // for us.  Meanwhile no new requests will be accepted because the
    // POA will not process them.
    if (!this->orb_core_.resource_factory ()->drop_replies_during_shutdown () &&
            leader_follower.has_clients ())
    {
        reactor->wakeup_all_threads ();
    }
    else
    {
        // End the reactor if we want shutdown dropping replies along the
        // way.
        reactor->end_reactor_event_loop ();
    }
}