summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-12-11 20:16:15 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-12-11 20:16:15 +0000
commitf07c2e28f19d546b2cd4276a7f4b3e5a0e293cc6 (patch)
treee9606a34781da353216ad953e64e1cdf2f2a3d0e
parentff8c6c28887c24b48c3873e01830739a1fbf1331 (diff)
downloadATCD-f07c2e28f19d546b2cd4276a7f4b3e5a0e293cc6.tar.gz
ChangeLogTag: Thu Dec 11 14:03:16 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog22
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/amh_ss.cpp8
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/interface_ss.cpp32
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_interface/amh_ss.h2
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_interface/interface_ss.h5
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 <j.parsons@vanderbilt.edu>
+
+ * 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 <coryan@atdesk.com> for pointing out the
+ problem and suggesting the fix.
+
Thu Dec 11 14:01:34 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
* 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.
@@ -537,6 +553,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)
{
TAO_OutStream *os = this->ctx_->stream ();
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,