From f07c2e28f19d546b2cd4276a7f4b3e5a0e293cc6 Mon Sep 17 00:00:00 2001 From: parsons Date: Thu, 11 Dec 2003 20:16:15 +0000 Subject: ChangeLogTag: Thu Dec 11 14:03:16 2003 Jeff Parsons --- TAO/ChangeLog | 22 +++++++++++++++ TAO/TAO_IDL/be/be_visitor_interface/amh_ss.cpp | 8 ++++++ .../be/be_visitor_interface/interface_ss.cpp | 32 ++++++++++++++++++---- .../be_include/be_visitor_interface/amh_ss.h | 2 ++ .../be_include/be_visitor_interface/interface_ss.h | 5 ++++ 5 files changed, 64 insertions(+), 5 deletions(-) diff --git a/TAO/ChangeLog b/TAO/ChangeLog index ab77b2cc45c..8fb6fd8e33a 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,25 @@ +Thu Dec 11 14:03:16 2003 Jeff Parsons + + * TAO_IDL/be/be_visitor_interface/amh_ss.cpp: + * TAO_IDL/be/be_visitor_interface/interface_ss.cpp: + * TAO_IDL/be_include/be_visitor_interface/amh_ss.h: + * TAO_IDL/be_include/be_visitor_interface/interface_ss.h: + + Added virtual method to the be_visitor_interface_ss visitor called + genrerate_send_reply, which is a no-op, but when overridden + in the be_visitor_amh_interface_ss visitor, generates an explicit + send_reply call on _tao_server_request. This new method is then + used in the generation of the _is_a_skel, _nonexistent_skel, + _interface_skel, and _component_skel methods, and the explicit + send_reply call gets generated for the AMH version of the + interface. This addition was needed because the above generated + methods need a reply to be sent right away, and this is not + handled under the hood in asynchronous_upcall_dispatch() as it + is in synchronous_upcall_dispatch(). This fix closes + http://deuce.doc.wustl.edu/bugzilla/show_bug.cgi?id=1670. Thanks + to Carlos O'Ryan for pointing out the + problem and suggesting the fix. + Thu Dec 11 14:01:34 2003 Balachandran Natarajan * docs/tutorials/Quoter/Simple/ImprovedServer/Quoter_Simple_ImprovedServer.mpc: diff --git a/TAO/TAO_IDL/be/be_visitor_interface/amh_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/amh_ss.cpp index ed3ab084134..bd72c875591 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/amh_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/amh_ss.cpp @@ -148,6 +148,14 @@ be_visitor_amh_interface_ss::dispatch_method (be_interface *node) << "}"; } +void +be_visitor_amh_interface_ss::generate_send_reply (TAO_OutStream * os) +{ + *os << be_nl << be_nl + << "_tao_server_request.tao_send_reply ();"; +} + + int be_visitor_amh_interface_ss::generate_amh_classes (be_interface *) { diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp index 071c54d5b13..1811875179f 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp @@ -215,7 +215,11 @@ be_visitor_interface_ss::visit_interface (be_interface *node) } *os << be_uidt_nl - << "}" << be_uidt << be_uidt_nl + << "}" << be_uidt; + + this->generate_send_reply (os); + + *os << be_uidt_nl << "}" << be_nl << be_nl; @@ -254,7 +258,11 @@ be_visitor_interface_ss::visit_interface (be_interface *node) } *os << be_uidt_nl - << "}" << be_uidt << be_uidt_nl + << "}" << be_uidt; + + this->generate_send_reply (os); + + *os << be_uidt_nl << "}" << be_nl << be_nl; // Generate code for the _interface skeleton. @@ -295,8 +303,12 @@ be_visitor_interface_ss::visit_interface (be_interface *node) *os << "if (_tao_result == 0)" << be_idt_nl << "{" << be_idt_nl << "ACE_THROW (CORBA::MARSHAL ());" << be_uidt_nl - << "}" << be_uidt << be_uidt_nl; - *os << "}" << be_nl << be_nl; + << "}" << be_uidt; + + this->generate_send_reply (os); + + *os << be_uidt_nl + << "}" << be_nl << be_nl; // Generate code for the _component skeleton. *os << "void " << full_skel_name @@ -333,7 +345,11 @@ be_visitor_interface_ss::visit_interface (be_interface *node) } *os << be_uidt_nl - << "}" << be_uidt << be_uidt_nl + << "}" << be_uidt; + + this->generate_send_reply (os); + + *os << be_uidt_nl << "}" << be_nl << be_nl; // Generate code for the _is_a override. @@ -536,6 +552,12 @@ be_visitor_interface_ss::this_method (be_interface *node) << "}"; } +void +be_visitor_interface_ss::generate_send_reply (TAO_OutStream *) +{ + // no-op for regular interfaces +} + void be_visitor_interface_ss::dispatch_method (be_interface *node) { diff --git a/TAO/TAO_IDL/be_include/be_visitor_interface/amh_ss.h b/TAO/TAO_IDL/be_include/be_visitor_interface/amh_ss.h index d836cc22d59..b9b5f6a6717 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_interface/amh_ss.h +++ b/TAO/TAO_IDL/be_include/be_visitor_interface/amh_ss.h @@ -29,6 +29,8 @@ protected: virtual void this_method (be_interface *node); virtual void dispatch_method (be_interface *node); + virtual void generate_send_reply (TAO_OutStream * os); + virtual int generate_amh_classes (be_interface *node); virtual int generate_proxy_classes (be_interface *node); virtual int generate_downcast_implementation (be_interface *node, diff --git a/TAO/TAO_IDL/be_include/be_visitor_interface/interface_ss.h b/TAO/TAO_IDL/be_include/be_visitor_interface/interface_ss.h index fee57ebfe38..26017450331 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_interface/interface_ss.h +++ b/TAO/TAO_IDL/be_include/be_visitor_interface/interface_ss.h @@ -52,6 +52,11 @@ protected: virtual void this_method (be_interface *node); virtual void dispatch_method (be_interface *node); + // Some AMH skeletons must explicitly send the reply, for regular + // classes the following function is empty, for AMH code it + // generates the explicit call. + virtual void generate_send_reply (TAO_OutStream * os); + virtual int generate_amh_classes (be_interface *node); virtual int generate_proxy_classes (be_interface *node); virtual int generate_downcast_implementation (be_interface *node, -- cgit v1.2.1