diff options
author | Phil Mesnier <mesnier_p@ociweb.com> | 2013-03-26 16:38:26 +0000 |
---|---|---|
committer | Phil Mesnier <mesnier_p@ociweb.com> | 2013-03-26 16:38:26 +0000 |
commit | 0cb590dc04eabfdfa492d4511871a9d3b5a0cf3d (patch) | |
tree | 803a52b4d3ded692abe77d763f3fbe5893afda19 | |
parent | 71865cd737b72526e9a0852516808a73aceedb31 (diff) | |
download | ATCD-0cb590dc04eabfdfa492d4511871a9d3b5a0cf3d.tar.gz |
Tue Mar 26 16:35:26 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r-- | TAO/ChangeLog_Asynch_ImR | 14 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp | 4 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/ImR_Locator.cpp | 2 | ||||
-rw-r--r-- | TAO/tao/Messaging/AMH_Response_Handler.cpp | 37 |
4 files changed, 43 insertions, 14 deletions
diff --git a/TAO/ChangeLog_Asynch_ImR b/TAO/ChangeLog_Asynch_ImR index 58ff12fc856..8edf3c4d262 100644 --- a/TAO/ChangeLog_Asynch_ImR +++ b/TAO/ChangeLog_Asynch_ImR @@ -1,3 +1,17 @@ +Tue Mar 26 16:35:26 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com> + + * orbsvcs/ImplRepo_Service/Forwarder.cpp: + + Clean up error in validating the forward-to IOR. + + * orbsvcs/ImplRepo_Service/ImR_Locator.cpp: + + Clean up the shutdown handler for single-thread use. + + * tao/Messaging/AMH_Response_Handler.cpp: + + Add the explicit handling of ForwardRequest exceptions. + Tue Mar 26 15:52:50 UTC 2013 Byron Harris <harrisb@ociweb.com> * bin/tao_other_tests.lst: diff --git a/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp b/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp index 0be828d5e71..55c92f9e6da 100644 --- a/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp @@ -326,7 +326,7 @@ ImR_DSI_ReplyHandler::ImR_DSI_ReplyHandler (const char *key, :key_str_ (key), server_name_ (server_name), orb_(CORBA::ORB::_duplicate (orb)), - resp_ (resp) + resp_ (TAO_AMH_DSI_Response_Handler::_duplicate (resp)) { } @@ -365,7 +365,7 @@ ImR_DSI_ReplyHandler::send_ior (const char *pior) ACE_TEXT ("to <%s>\n"), this->server_name_.in(), ior.c_str())); - CORBA::Object_var forward_obj; + CORBA::Object_var forward_obj = this->orb_->string_to_object (ior.c_str ()); if (!CORBA::is_nil (forward_obj.in ())) diff --git a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator.cpp b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator.cpp index 9f5fc0b42c6..d244e2b2baf 100644 --- a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator.cpp @@ -25,7 +25,7 @@ ImR_Locator_Shutdown::operator () (int /*which_signal*/) { try { - this->imr_.shutdown (true); + this->imr_.shutdown (false); } catch (const CORBA::Exception& ex) { diff --git a/TAO/tao/Messaging/AMH_Response_Handler.cpp b/TAO/tao/Messaging/AMH_Response_Handler.cpp index 8416ec1c049..bf2ea0b9bbd 100644 --- a/TAO/tao/Messaging/AMH_Response_Handler.cpp +++ b/TAO/tao/Messaging/AMH_Response_Handler.cpp @@ -12,6 +12,7 @@ #include "tao/debug.h" #include "tao/Buffer_Allocator_T.h" #include "tao/SystemException.h" +#include "tao/PortableServer/ForwardRequestC.h" #include "ace/Copy_Disabled.h" @@ -194,22 +195,36 @@ TAO_AMH_Response_Handler::_tao_rh_send_exception (const CORBA::Exception &ex) // @@ It appears as if there should be a more efficient way to do // this: the caller already knows this because it is part of the // ExceptionHolder information. - if (CORBA::SystemException::_downcast (&ex)) + + const PortableServer::ForwardRequest *fr = + PortableServer::ForwardRequest::_downcast (&ex); + if (fr != 0) { - reply_params.reply_status (GIOP::SYSTEM_EXCEPTION); + reply_params.reply_status (GIOP::LOCATION_FORWARD); + if (this->mesg_base_->generate_reply_header (this->_tao_out, + reply_params) == -1) + { + throw ::CORBA::INTERNAL (); + } + this->_tao_out << fr->forward_reference; } else { - reply_params.reply_status (GIOP::USER_EXCEPTION); - } - - if (this->mesg_base_->generate_exception_reply (this->_tao_out, - reply_params, - ex) == -1) - { - throw ::CORBA::INTERNAL (); + if (CORBA::SystemException::_downcast (&ex)) + { + reply_params.reply_status (GIOP::SYSTEM_EXCEPTION); + } + else + { + reply_params.reply_status (GIOP::USER_EXCEPTION); + } + if (this->mesg_base_->generate_exception_reply (this->_tao_out, + reply_params, + ex) == -1) + { + throw ::CORBA::INTERNAL (); + } } - // Send the Exception if (this->transport_->send_message (this->_tao_out, 0, |