summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2013-03-26 16:38:26 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2013-03-26 16:38:26 +0000
commit0cb590dc04eabfdfa492d4511871a9d3b5a0cf3d (patch)
tree803a52b4d3ded692abe77d763f3fbe5893afda19
parent71865cd737b72526e9a0852516808a73aceedb31 (diff)
downloadATCD-0cb590dc04eabfdfa492d4511871a9d3b5a0cf3d.tar.gz
Tue Mar 26 16:35:26 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r--TAO/ChangeLog_Asynch_ImR14
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/Forwarder.cpp4
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/ImR_Locator.cpp2
-rw-r--r--TAO/tao/Messaging/AMH_Response_Handler.cpp37
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,