summaryrefslogtreecommitdiff
path: root/TAO/tao/Dynamic_TP
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2014-03-10 16:47:04 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2014-03-10 16:47:04 +0000
commitbd7da767b2ac137f6a7bde17b10998eda6d2d39d (patch)
treec88203775fb23573d6a7938811b76938e8d4aa76 /TAO/tao/Dynamic_TP
parentb616e5fae8541aa8d6f66b1a0b0a822a0935c9e1 (diff)
downloadATCD-bd7da767b2ac137f6a7bde17b10998eda6d2d39d.tar.gz
Mon Mar 10 16:25:23 UTC 2014 Phil Mesnier <mesnier_p@ociweb.com>
* tao/CSD_ThreadPool/CSD_TP_Strategy.cpp: * tao/Dynamic_TP/DTP_POA_Strategy.cpp: * tao/PortableServer/Object_Adapter.cpp: * tao/PortableServer/Servant_Base.cpp: * tao/TAO_Server_Request.h: * tao/TAO_Server_Request.inl: Refining the previous commit. It turns out that simply moving the sync reply before the dispatch was problematic in the case where a location forward exception may come from a default servant, such as the case with the Implementation Repository. To accommodate both the need to send the reply before the dispatch in case of queuing and after in the case of IMR, I've integrated the logic into the server request object and added a new condition that is set to true only if the CSD_ThreadPool or Dynamic_TP_POA strategy is used.
Diffstat (limited to 'TAO/tao/Dynamic_TP')
-rw-r--r--TAO/tao/Dynamic_TP/DTP_POA_Strategy.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/TAO/tao/Dynamic_TP/DTP_POA_Strategy.cpp b/TAO/tao/Dynamic_TP/DTP_POA_Strategy.cpp
index 6a54615da0b..ee83ed4e645 100644
--- a/TAO/tao/Dynamic_TP/DTP_POA_Strategy.cpp
+++ b/TAO/tao/Dynamic_TP/DTP_POA_Strategy.cpp
@@ -139,6 +139,14 @@ TAO_DTP_POA_Strategy::dispatch_remote_request_i
TAO::CSD::TP_Servant_State::HandleType servant_state =
this->get_servant_state (servant);
+ // Handle the one ways that are SYNC_WITH_SERVER and not collocated.
+ // before queuing the request and thus avoid delaying the client.
+ // This is a problem if the servant ends up throwing a Location Forward
+ // exception. If necessary, add an override config option here.
+ CORBA::Boolean early_sync = true;
+ server_request.is_queued (early_sync);
+ server_request.sync_before_dispatch ();
+
// Now we can create the TP_Remote_Request object, and then add it to our
// task_'s "request queue".
//