diff options
Diffstat (limited to 'TAO/tao/GIOP_Message_Base.cpp')
-rw-r--r-- | TAO/tao/GIOP_Message_Base.cpp | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/TAO/tao/GIOP_Message_Base.cpp b/TAO/tao/GIOP_Message_Base.cpp index b7a0952feac..271e521c3ac 100644 --- a/TAO/tao/GIOP_Message_Base.cpp +++ b/TAO/tao/GIOP_Message_Base.cpp @@ -1094,13 +1094,6 @@ TAO_GIOP_Message_Base::process_request ( } catch (...) { - // @@ TODO some c++ exception or another, but what do we do with - // it? - // We are supposed to map it into a CORBA::UNKNOWN exception. - // BTW, this cannot be detected if using the <env> mapping. If - // we have native exceptions but no support for them in the ORB - // we should still be able to catch it. If we don't have native - // exceptions it couldn't have been raised in the first place! int result = 0; if (response_required) @@ -1109,23 +1102,20 @@ TAO_GIOP_Message_Base::process_request ( (TAO_UNHANDLED_SERVER_CXX_EXCEPTION, 0), CORBA::COMPLETED_MAYBE); - result = this->send_reply_exception (transport, - output, - request_id, - &request.reply_service_info (), - &exception); - if (result == -1) + if (this->send_reply_exception (transport, + output, + request_id, + &request.reply_service_info (), + &exception) == -1 + && TAO_debug_level > 0) { - if (TAO_debug_level > 0) - { - ACE_ERROR ((LM_ERROR, - ACE_TEXT ("TAO (%P|%t) - TAO_GIOP_Message_Base::process_request[3], ") - ACE_TEXT ("%p: ") - ACE_TEXT ("cannot send exception\n"), - ACE_TEXT ("process_request ()"))); - exception._tao_print_exception ( - "TAO_GIOP_Message_Base::process_request[3]"); - } + ACE_ERROR ((LM_ERROR, + ACE_TEXT ("TAO (%P|%t) - TAO_GIOP_Message_Base::process_request[3], ") + ACE_TEXT ("%p: ") + ACE_TEXT ("cannot send exception\n"), + ACE_TEXT ("process_request ()"))); + exception._tao_print_exception ( + "TAO_GIOP_Message_Base::process_request[3]"); } } else if (TAO_debug_level > 0) @@ -1136,11 +1126,13 @@ TAO_GIOP_Message_Base::process_request ( // However, in this case, we cannot close the connection // down, since it really isn't the client's fault. ACE_ERROR ((LM_ERROR, - ACE_TEXT ("(%P|%t|%N|%l) exception thrown ") + ACE_TEXT ("TAO (%P|%t) exception thrown ") ACE_TEXT ("but client is not waiting a response\n"))); } - return result; + // Propagate the non-CORBA C++ exception up to the application + // server. + throw; } return 0; |