diff options
author | Phil Mesnier <mesnier_p@ociweb.com> | 2014-03-10 16:47:04 +0000 |
---|---|---|
committer | Phil Mesnier <mesnier_p@ociweb.com> | 2014-03-10 16:47:04 +0000 |
commit | bd7da767b2ac137f6a7bde17b10998eda6d2d39d (patch) | |
tree | c88203775fb23573d6a7938811b76938e8d4aa76 /TAO/tao/Dynamic_TP | |
parent | b616e5fae8541aa8d6f66b1a0b0a822a0935c9e1 (diff) | |
download | ATCD-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.cpp | 8 |
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". // |