diff options
Diffstat (limited to 'TAO/tao/UIOP_Connect.cpp')
-rw-r--r-- | TAO/tao/UIOP_Connect.cpp | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/TAO/tao/UIOP_Connect.cpp b/TAO/tao/UIOP_Connect.cpp index 1a1a05d8912..68f2b4ac238 100644 --- a/TAO/tao/UIOP_Connect.cpp +++ b/TAO/tao/UIOP_Connect.cpp @@ -11,7 +11,7 @@ #include "tao/ORB.h" #include "tao/CDR.h" #include "tao/Timeprobe.h" - +#include "tao/Server_Strategy_Factory.h" #include "tao/Messaging_Policy_i.h" #if !defined (__ACE_INLINE__) @@ -204,7 +204,18 @@ TAO_UIOP_Server_Connection_Handler::handle_close (ACE_HANDLE handle, --this->refcount_; if (this->refcount_ == 0) - return TAO_UIOP_SVC_HANDLER::handle_close (handle, rm); + { + // Remove the handle from the ORB Core's handle set so that it + // isn't included in the set that is passed to the reactor upon + // ORB destruction. + TAO_Server_Strategy_Factory *f = + this->orb_core_->server_factory (); + + if (f->activate_server_connections () == 0) + (void) this->orb_core_->remove_handle (handle); + + return TAO_UIOP_SVC_HANDLER::handle_close (handle, rm); + } return 0; } |