summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/tao/DynamicInterface/Request.cpp9
-rw-r--r--TAO/tao/DynamicInterface/Request.inl6
-rw-r--r--TAO/tao/NVList.h5
-rw-r--r--TAO/tao/NVList.i6
4 files changed, 19 insertions, 7 deletions
diff --git a/TAO/tao/DynamicInterface/Request.cpp b/TAO/tao/DynamicInterface/Request.cpp
index 9917fd7fceb..ca45f417720 100644
--- a/TAO/tao/DynamicInterface/Request.cpp
+++ b/TAO/tao/DynamicInterface/Request.cpp
@@ -48,6 +48,13 @@ CORBA_Request::_decr_refcnt (void)
return 0;
}
+// The pseudo-object _nil method.
+CORBA_Request_ptr
+CORBA_Request::_nil (void)
+{
+ return (CORBA_Request_ptr)0;
+}
+
// DII Request class implementation
CORBA_Request::CORBA_Request (CORBA::Object_ptr obj,
@@ -133,7 +140,7 @@ CORBA_Request::~CORBA_Request (void)
void
CORBA_Request::invoke (CORBA::Environment &ACE_TRY_ENV)
{
- CORBA::Boolean argument_flag = this->args_->count () ? 1 : 0;
+ CORBA::Boolean argument_flag = this->args_->_lazy_has_arguments ();
TAO_GIOP_DII_Invocation call (this->target_->_stubobj (),
this->opname_,
diff --git a/TAO/tao/DynamicInterface/Request.inl b/TAO/tao/DynamicInterface/Request.inl
index 13ba1f53583..caf3d6e1a68 100644
--- a/TAO/tao/DynamicInterface/Request.inl
+++ b/TAO/tao/DynamicInterface/Request.inl
@@ -13,12 +13,6 @@ CORBA_Request::_duplicate (CORBA_Request_ptr x)
return x;
}
-ACE_INLINE CORBA_Request_ptr
-CORBA_Request::_nil (void)
-{
- return (CORBA_Request_ptr)0;
-}
-
ACE_INLINE CORBA::Object_ptr
CORBA_Request::target (void) const
{
diff --git a/TAO/tao/NVList.h b/TAO/tao/NVList.h
index 74169059915..3d3d6c5f593 100644
--- a/TAO/tao/NVList.h
+++ b/TAO/tao/NVList.h
@@ -268,6 +268,11 @@ public:
// re-alignment.
// It returns ACE_CDR::MAX_ALIGNMENT to indicate errors.
+ CORBA::Boolean _lazy_has_arguments (void) const;
+ // If this list is used by a DII request, this will tell us if
+ // our CDR stream contains any marshaled arguments (needed for
+ // GIOP 1.2).
+
// Useful for template programming.
#if !defined(__GNUC__) || __GNUC__ > 2 || __GNUC_MINOR__ >= 8
typedef CORBA_NVList_ptr _ptr_type;
diff --git a/TAO/tao/NVList.i b/TAO/tao/NVList.i
index 02b967a4094..1d4ad9efc65 100644
--- a/TAO/tao/NVList.i
+++ b/TAO/tao/NVList.i
@@ -269,6 +269,12 @@ CORBA_NVList::_nil (void)
return 0;
}
+ACE_INLINE CORBA::Boolean
+CORBA_NVList::_lazy_has_arguments (void) const
+{
+ return this->incoming_->length () == 0 ? 0 : 1;
+}
+
// *************************************************************
// Inline operations for class CORBA_NVList_var
// *************************************************************