diff options
Diffstat (limited to 'TAO/tao/Collocated_Invocation.cpp')
-rw-r--r-- | TAO/tao/Collocated_Invocation.cpp | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/TAO/tao/Collocated_Invocation.cpp b/TAO/tao/Collocated_Invocation.cpp index ee4d5e23f80..f71d7b35a32 100644 --- a/TAO/tao/Collocated_Invocation.cpp +++ b/TAO/tao/Collocated_Invocation.cpp @@ -5,6 +5,7 @@ #include "tao/TAO_Server_Request.h" #include "tao/Stub.h" #include "tao/operation_details.h" +#include "tao/PortableInterceptor.h" #if TAO_HAS_INTERCEPTORS == 1 # include "tao/PortableInterceptorC.h" @@ -116,7 +117,7 @@ namespace TAO } catch ( ::CORBA::Exception& ex) { - // Ignore exceptions for oneways + // Ignore CORBA exceptions for oneways if (this->response_expected_ == false) return TAO_INVOKE_SUCCESS; @@ -130,9 +131,25 @@ namespace TAO else #else ACE_UNUSED_ARG (ex); -#endif /*TAO_HAS_INTERCEPTORS*/ +#endif /* TAO_HAS_INTERCEPTORS */ throw; } +#if TAO_HAS_INTERCEPTORS == 1 + catch (...) + { + // Notify interceptors of non-CORBA exception, and propagate + // that exception to the caller. + + PortableInterceptor::ReplyStatus const st = + this->handle_all_exception (); + + if (st == PortableInterceptor::LOCATION_FORWARD || + st == PortableInterceptor::TRANSPORT_RETRY) + s = TAO_INVOKE_RESTART; + else + throw; + } +#endif /* TAO_HAS_INTERCEPTORS == 1 */ if (this->forwarded_to_.in () != 0) s = TAO_INVOKE_RESTART; |