summaryrefslogtreecommitdiff
path: root/TAO/tao
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-19 20:04:20 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-19 20:04:20 +0000
commitdcfe7536d809dba6dfb3f53a0f556d1600ecd243 (patch)
tree71394fed2d6cdddb3d069b58ac1c3d6fa4922098 /TAO/tao
parent9efeb805130bfc450dd517c94da2442d810d371a (diff)
downloadATCD-dcfe7536d809dba6dfb3f53a0f556d1600ecd243.tar.gz
ChangeLogTag: Wed Nov 19 13:51:18 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
Diffstat (limited to 'TAO/tao')
-rw-r--r--TAO/tao/Any_Special_Impl_T.cpp1
-rw-r--r--TAO/tao/DynamicAny/DynAny_i.cpp6
-rw-r--r--TAO/tao/DynamicAny/DynArray_i.cpp64
-rw-r--r--TAO/tao/DynamicAny/DynCommon.cpp156
-rw-r--r--TAO/tao/DynamicAny/DynEnum_i.cpp33
-rw-r--r--TAO/tao/DynamicAny/DynSequence_i.cpp37
-rw-r--r--TAO/tao/DynamicAny/DynStruct_i.cpp60
-rw-r--r--TAO/tao/DynamicAny/DynUnion_i.cpp105
8 files changed, 332 insertions, 130 deletions
diff --git a/TAO/tao/Any_Special_Impl_T.cpp b/TAO/tao/Any_Special_Impl_T.cpp
index 00d380b0fe2..479f6280704 100644
--- a/TAO/tao/Any_Special_Impl_T.cpp
+++ b/TAO/tao/Any_Special_Impl_T.cpp
@@ -77,6 +77,7 @@ TAO::Any_Special_Impl_T<T, from_T, to_T>::insert (CORBA::Any & any,
bounded_tc,
value,
bound));
+ CORBA::release (bounded_tc);
any.replace (new_impl);
}
diff --git a/TAO/tao/DynamicAny/DynAny_i.cpp b/TAO/tao/DynamicAny/DynAny_i.cpp
index 4b329b9b6d1..6adf977d3af 100644
--- a/TAO/tao/DynamicAny/DynAny_i.cpp
+++ b/TAO/tao/DynamicAny/DynAny_i.cpp
@@ -442,7 +442,8 @@ TAO_DynAny_i::equal (DynamicAny::DynAny_ptr rhs
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- CORBA::ULong bound = unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong bound =
+ unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
const char *rhs_v, *lhs_v;
@@ -480,7 +481,8 @@ TAO_DynAny_i::equal (DynamicAny::DynAny_ptr rhs
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- CORBA::ULong bound = unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong bound =
+ unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
const CORBA::WChar *rhs_v, *lhs_v;
diff --git a/TAO/tao/DynamicAny/DynArray_i.cpp b/TAO/tao/DynamicAny/DynArray_i.cpp
index 33c01ca9c91..3207bc63d6c 100644
--- a/TAO/tao/DynamicAny/DynArray_i.cpp
+++ b/TAO/tao/DynamicAny/DynArray_i.cpp
@@ -58,6 +58,7 @@ TAO_DynArray_i::init (const CORBA::Any & any
// Get the CDR stream of the argument.
ACE_Message_Block* mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -66,11 +67,17 @@ TAO_DynArray_i::init (const CORBA::Any & any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
CORBA::TypeCode_var field_tc =
this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
@@ -124,14 +131,16 @@ TAO_DynArray_i::init (CORBA::TypeCode_ptr tc
this->init_common ();
- CORBA::TypeCode_var elemtype = this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var elemtype =
+ this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
for (CORBA::ULong i = 0; i < numfields; ++i)
{
// Recursively initialize each element.
- this->da_members_[i] = TAO_DynAnyFactory::make_dyn_any (elemtype.in ()
- ACE_ENV_ARG_PARAMETER);
+ this->da_members_[i] =
+ TAO_DynAnyFactory::make_dyn_any (elemtype.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
@@ -148,7 +157,8 @@ TAO_DynArray_i::get_element_type (ACE_ENV_SINGLE_ARG_DECL)
while (kind != CORBA::tk_array)
{
- element_type = element_type->content_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ element_type =
+ element_type->content_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
kind = element_type->kind (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -156,7 +166,8 @@ TAO_DynArray_i::get_element_type (ACE_ENV_SINGLE_ARG_DECL)
}
// Return the content type.
- CORBA::TypeCode_ptr retval = element_type->content_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_ptr retval =
+ element_type->content_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
return retval;
@@ -261,15 +272,17 @@ TAO_DynArray_i::set_elements (const DynamicAny::AnySeq & value
}
CORBA::TypeCode_var value_tc;
- CORBA::TypeCode_var element_type = this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var element_type =
+ this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
for (CORBA::ULong i = 0; i < length; i++)
{
// Check each arg element for type match.
value_tc = value[i].type ();
- CORBA::Boolean equivalent = value_tc->equivalent (element_type.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean equivalent =
+ value_tc->equivalent (element_type.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (equivalent)
@@ -351,7 +364,8 @@ TAO_DynArray_i::set_elements_as_dyn_any (
ACE_THROW (DynamicAny::DynAny::InvalidValue ());
}
- CORBA::TypeCode_var element_type = this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var element_type =
+ this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::TypeCode_var val_type;
@@ -369,7 +383,8 @@ TAO_DynArray_i::set_elements_as_dyn_any (
if (equivalent)
{
- this->da_members_[i] = values[i]->copy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ this->da_members_[i] =
+ values[i]->copy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
else
@@ -396,14 +411,16 @@ TAO_DynArray_i::from_any (const CORBA::Any& any
}
CORBA::TypeCode_var tc = any.type ();
- CORBA::Boolean equivalent = this->type_.in ()->equivalent (tc.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean equivalent =
+ this->type_.in ()->equivalent (tc.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (equivalent)
{
// Get the CDR stream of the argument.
ACE_Message_Block* mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -412,11 +429,17 @@ TAO_DynArray_i::from_any (const CORBA::Any& any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
CORBA::ULong length = ACE_static_cast (CORBA::ULong,
this->da_members_.size ());
CORBA::ULong arg_length = this->get_tc_length (tc.in ()
@@ -428,7 +451,8 @@ TAO_DynArray_i::from_any (const CORBA::Any& any
ACE_THROW (DynamicAny::DynAny::TypeMismatch ());
}
- CORBA::TypeCode_var field_tc = this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var field_tc =
+ this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
for (CORBA::ULong i = 0; i < arg_length; ++i)
@@ -476,17 +500,20 @@ TAO_DynArray_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
0);
}
- CORBA::TypeCode_var field_tc = this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var field_tc =
+ this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
TAO_OutputCDR out_cdr;
CORBA::Any_var field_any;
size_t length = this->da_members_.size ();
+ bool type_known = false;
for (size_t i = 0; i < length; ++i)
{
// Recursive step.
- field_any = this->da_members_[i]->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
+ field_any =
+ this->da_members_[i]->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
ACE_Message_Block* field_mb = field_any->_tao_get_cdr ();
@@ -499,11 +526,18 @@ TAO_DynArray_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
TAO_OutputCDR out;
field_any->impl ()->marshal_value (out);
ACE_CDR::consolidate (field_mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR field_cdr (field_mb,
field_any->_tao_byte_order ());
+ if (type_known)
+ {
+ field_mb->release ();
+ type_known = false;
+ }
+
(void) TAO_Marshal_Object::perform_append (field_tc.in (),
&field_cdr,
&out_cdr
diff --git a/TAO/tao/DynamicAny/DynCommon.cpp b/TAO/tao/DynamicAny/DynCommon.cpp
index a5ea151f3b8..e3d574497fc 100644
--- a/TAO/tao/DynamicAny/DynCommon.cpp
+++ b/TAO/tao/DynamicAny/DynCommon.cpp
@@ -94,7 +94,8 @@ TAO_DynCommon::insert_boolean (CORBA::Boolean value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_boolean (value
@@ -127,7 +128,8 @@ TAO_DynCommon::insert_octet (CORBA::Octet value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_octet (value
@@ -160,7 +162,8 @@ TAO_DynCommon::insert_char (CORBA::Char value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_char (value
@@ -193,7 +196,8 @@ TAO_DynCommon::insert_short (CORBA::Short value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_short (value
@@ -226,7 +230,8 @@ TAO_DynCommon::insert_ushort (CORBA::UShort value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_ushort (value
@@ -259,7 +264,8 @@ TAO_DynCommon::insert_long (CORBA::Long value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_long (value
@@ -292,7 +298,8 @@ TAO_DynCommon::insert_ulong (CORBA::ULong value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_ulong (value
@@ -325,7 +332,8 @@ TAO_DynCommon::insert_float (CORBA::Float value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_float (value
@@ -358,7 +366,8 @@ TAO_DynCommon::insert_double (CORBA::Double value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_double (value
@@ -391,7 +400,8 @@ TAO_DynCommon::insert_string (const char * value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_string (value
@@ -405,7 +415,8 @@ TAO_DynCommon::insert_string (const char * value
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
- CORBA::TCKind kind = unaliased_tc->kind (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TCKind kind =
+ unaliased_tc->kind (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (kind != CORBA::tk_string)
@@ -413,7 +424,8 @@ TAO_DynCommon::insert_string (const char * value
ACE_THROW (DynamicAny::DynAny::TypeMismatch ());
}
- CORBA::ULong bound = unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong bound =
+ unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (bound > 0 && bound < ACE_OS::strlen (value))
@@ -443,7 +455,8 @@ TAO_DynCommon::insert_reference (CORBA::Object_ptr value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_reference (value
@@ -453,8 +466,9 @@ TAO_DynCommon::insert_reference (CORBA::Object_ptr value
else
{
CORBA::Boolean good_type = 1;
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (this->type_.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::TCKind kind =
+ TAO_DynAnyFactory::unalias (this->type_.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (kind != CORBA::tk_objref)
@@ -467,7 +481,8 @@ TAO_DynCommon::insert_reference (CORBA::Object_ptr value
if (ACE_OS::strcmp (value_id, "IDL:omg.org/CORBA/Object:1.0") != 0)
{
- const char *my_id = this->type_->id (ACE_ENV_SINGLE_ARG_PARAMETER);
+ const char *my_id =
+ this->type_->id (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (ACE_OS::strcmp (value_id, my_id) != 0)
@@ -525,7 +540,8 @@ TAO_DynCommon::insert_typecode (CORBA::TypeCode_ptr value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_typecode (value
@@ -558,7 +574,8 @@ TAO_DynCommon::insert_longlong (CORBA::LongLong value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_longlong (value
@@ -591,7 +608,8 @@ TAO_DynCommon::insert_ulonglong (CORBA::ULongLong value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_ulonglong (value
@@ -624,7 +642,8 @@ TAO_DynCommon::insert_longdouble (CORBA::LongDouble value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_longdouble (value
@@ -657,7 +676,8 @@ TAO_DynCommon::insert_wchar (CORBA::WChar value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_wchar (value
@@ -690,7 +710,8 @@ TAO_DynCommon::insert_wstring (const CORBA::WChar * value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_wstring (value
@@ -734,7 +755,8 @@ TAO_DynCommon::insert_any (const CORBA::Any &value
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
cc->insert_any (value
@@ -805,7 +827,8 @@ TAO_DynCommon::get_boolean (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_boolean (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -840,7 +863,8 @@ TAO_DynCommon::get_octet (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_octet (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -875,7 +899,8 @@ TAO_DynCommon::get_char (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_char (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -910,7 +935,8 @@ TAO_DynCommon::get_short (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_short (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -945,7 +971,8 @@ TAO_DynCommon::get_ushort (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_ushort (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -980,7 +1007,8 @@ TAO_DynCommon::get_long (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_long (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1015,7 +1043,8 @@ TAO_DynCommon::get_ulong (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_ulong (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1050,7 +1079,8 @@ TAO_DynCommon::get_float (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_float (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1085,7 +1115,8 @@ TAO_DynCommon::get_double (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_double (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1120,7 +1151,8 @@ TAO_DynCommon::get_string (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_string (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1132,7 +1164,8 @@ TAO_DynCommon::get_string (ACE_ENV_SINGLE_ARG_DECL)
ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- CORBA::TCKind kind = unaliased_tc->kind (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TCKind kind =
+ unaliased_tc->kind (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
if (kind != CORBA::tk_string)
@@ -1143,7 +1176,8 @@ TAO_DynCommon::get_string (ACE_ENV_SINGLE_ARG_DECL)
char *retval = 0;
- CORBA::ULong bound = unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong bound =
+ unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
// We will have caught a type mismatch above, so if this fails,
@@ -1174,7 +1208,8 @@ TAO_DynCommon::get_reference (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::Object::_nil ());
return cc->get_reference (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1209,7 +1244,8 @@ TAO_DynCommon::get_typecode (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_typecode (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1246,7 +1282,8 @@ TAO_DynCommon::get_longlong (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (retval);
return cc->get_longlong (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1317,7 +1354,8 @@ TAO_DynCommon::get_longdouble (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (retval);
return cc->get_longdouble (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1350,7 +1388,8 @@ TAO_DynCommon::get_wchar (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_wchar (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1385,7 +1424,8 @@ TAO_DynCommon::get_wstring (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_wstring (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1402,7 +1442,8 @@ TAO_DynCommon::get_wstring (ACE_ENV_SINGLE_ARG_DECL)
CORBA::WChar *retval = 0;
- CORBA::ULong bound = unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong bound =
+ unaliased_tc->length (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
(void) (this->any_ >>= CORBA::Any::to_wstring (retval,
@@ -1428,7 +1469,8 @@ TAO_DynCommon::get_any (ACE_ENV_SINGLE_ARG_DECL)
if (this->has_components_)
{
- DynamicAny::DynAny_var cc = this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->check_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return cc->get_any (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1621,8 +1663,9 @@ TAO_DynCommon::set_flag (DynamicAny::DynAny_ptr component,
{
case CORBA::tk_array:
{
- TAO_DynArray_i *tmp = TAO_DynArray_i::_narrow (component
- ACE_ENV_ARG_PARAMETER);
+ TAO_DynArray_i *tmp =
+ TAO_DynArray_i::_narrow (component
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (destroying)
@@ -1655,8 +1698,9 @@ TAO_DynCommon::set_flag (DynamicAny::DynAny_ptr component,
}
case CORBA::tk_sequence:
{
- TAO_DynSequence_i *tmp = TAO_DynSequence_i::_narrow (component
- ACE_ENV_ARG_PARAMETER);
+ TAO_DynSequence_i *tmp =
+ TAO_DynSequence_i::_narrow (component
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (destroying)
@@ -1672,8 +1716,9 @@ TAO_DynCommon::set_flag (DynamicAny::DynAny_ptr component,
}
case CORBA::tk_struct:
{
- TAO_DynStruct_i *tmp = TAO_DynStruct_i::_narrow (component
- ACE_ENV_ARG_PARAMETER);
+ TAO_DynStruct_i *tmp =
+ TAO_DynStruct_i::_narrow (component
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (destroying)
@@ -1689,8 +1734,9 @@ TAO_DynCommon::set_flag (DynamicAny::DynAny_ptr component,
}
case CORBA::tk_union:
{
- TAO_DynUnion_i *tmp = TAO_DynUnion_i::_narrow (component
- ACE_ENV_ARG_PARAMETER);
+ TAO_DynUnion_i *tmp =
+ TAO_DynUnion_i::_narrow (component
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (destroying)
@@ -1742,7 +1788,8 @@ TAO_DynCommon::check_component (ACE_ENV_SINGLE_ARG_DECL)
DynamicAny::DynAny::_nil ());
}
- DynamicAny::DynAny_var cc = this->current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
+ DynamicAny::DynAny_var cc =
+ this->current_component (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (DynamicAny::DynAny::_nil ());
CORBA::TypeCode_var tc = cc->type (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -1778,8 +1825,9 @@ TAO_DynCommon::check_type (CORBA::TypeCode_ptr tc
DynamicAny::DynAny::TypeMismatch
))
{
- CORBA::Boolean equivalent = this->type_->equivalent (tc
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean equivalent =
+ this->type_->equivalent (tc
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (!equivalent)
diff --git a/TAO/tao/DynamicAny/DynEnum_i.cpp b/TAO/tao/DynamicAny/DynEnum_i.cpp
index 00891d9b1ee..a21a4b87d66 100644
--- a/TAO/tao/DynamicAny/DynEnum_i.cpp
+++ b/TAO/tao/DynamicAny/DynEnum_i.cpp
@@ -48,6 +48,7 @@ TAO_DynEnum_i::init (const CORBA::Any &any
this->type_ = tc;
ACE_Message_Block *mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -56,13 +57,18 @@ TAO_DynEnum_i::init (const CORBA::Any &any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
- cdr.read_ulong (this->value_);
+ if (type_known)
+ {
+ mb->release ();
+ }
+ cdr.read_ulong (this->value_);
this->init_common ();
}
@@ -108,8 +114,9 @@ TAO_DynEnum_i::get_as_string (ACE_ENV_SINGLE_ARG_DECL)
CORBA::SystemException
))
{
- const char *retval = this->type_.in ()->member_name (this->value_
- ACE_ENV_ARG_PARAMETER);
+ const char *retval =
+ this->type_.in ()->member_name (this->value_
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
return CORBA::string_dup (retval);
@@ -123,7 +130,8 @@ TAO_DynEnum_i::set_as_string (const char *value_as_string
DynamicAny::DynAny::InvalidValue
))
{
- CORBA::ULong count = this->type_.in ()->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong count =
+ this->type_.in ()->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::ULong i;
@@ -169,7 +177,8 @@ TAO_DynEnum_i::set_as_ulong (CORBA::ULong value_as_ulong
DynamicAny::DynAny::InvalidValue
))
{
- CORBA::ULong max = this->type_.in ()->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong max =
+ this->type_.in ()->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
if (value_as_ulong < max)
@@ -202,6 +211,7 @@ TAO_DynEnum_i::from_any (const CORBA::Any& any
{
// Get the CDR stream of the argument.
ACE_Message_Block* mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -210,11 +220,17 @@ TAO_DynEnum_i::from_any (const CORBA::Any& any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
cdr.read_ulong (this->value_);
}
else
@@ -274,6 +290,7 @@ TAO_DynEnum_i::equal (DynamicAny::DynAny_ptr rhs
ACE_CHECK_RETURN (0);
ACE_Message_Block *mb = any->_tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -283,11 +300,17 @@ TAO_DynEnum_i::equal (DynamicAny::DynAny_ptr rhs
TAO_OutputCDR out;
any->impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any->_tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
CORBA::ULong value;
cdr.read_ulong (value);
diff --git a/TAO/tao/DynamicAny/DynSequence_i.cpp b/TAO/tao/DynamicAny/DynSequence_i.cpp
index 805f8e72fd3..4bb6277f873 100644
--- a/TAO/tao/DynamicAny/DynSequence_i.cpp
+++ b/TAO/tao/DynamicAny/DynSequence_i.cpp
@@ -51,6 +51,7 @@ TAO_DynSequence_i::init (const CORBA::Any& any
// Get the CDR stream of the argument.
ACE_Message_Block *mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -59,11 +60,17 @@ TAO_DynSequence_i::init (const CORBA::Any& any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
CORBA::ULong length;
// If the any is a sequence, first 4 bytes of cdr hold the
@@ -162,7 +169,8 @@ TAO_DynSequence_i::get_element_type (ACE_ENV_SINGLE_ARG_DECL)
}
// Return the content type.
- CORBA::TypeCode_ptr retval = element_type->content_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_ptr retval =
+ element_type->content_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
return retval;
@@ -479,7 +487,8 @@ TAO_DynSequence_i::set_elements_as_dyn_any (
this->da_members_.size (length);
}
- CORBA::TypeCode_var element_type = this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var element_type =
+ this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
CORBA::TypeCode_var val_type;
@@ -504,7 +513,8 @@ TAO_DynSequence_i::set_elements_as_dyn_any (
ACE_CHECK;
}
- this->da_members_[i] = values[i]->copy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ this->da_members_[i] =
+ values[i]->copy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
else
@@ -547,14 +557,16 @@ TAO_DynSequence_i::from_any (const CORBA::Any & any
}
CORBA::TypeCode_var tc = any.type ();
- CORBA::Boolean equivalent = this->type_.in ()->equivalent (tc.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean equivalent =
+ this->type_.in ()->equivalent (tc.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (equivalent)
{
// Get the CDR stream of the argument.
ACE_Message_Block *mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -563,11 +575,17 @@ TAO_DynSequence_i::from_any (const CORBA::Any & any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
CORBA::ULong arg_length;
// If the any is a sequence, first 4 bytes of cdr hold the
@@ -656,6 +674,8 @@ TAO_DynSequence_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
this->get_element_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
+ bool type_known = false;
+
for (CORBA::ULong i = 0; i < this->component_count_; ++i)
{
// Recursive step
@@ -673,11 +693,18 @@ TAO_DynSequence_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
TAO_OutputCDR out;
field_any->impl ()->marshal_value (out);
ACE_CDR::consolidate (field_mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR field_cdr (field_mb,
field_any->_tao_byte_order ());
+ if (type_known)
+ {
+ field_mb->release ();
+ type_known = false;
+ }
+
(void) TAO_Marshal_Object::perform_append (field_tc.in (),
&field_cdr,
&out_cdr
diff --git a/TAO/tao/DynamicAny/DynStruct_i.cpp b/TAO/tao/DynamicAny/DynStruct_i.cpp
index e8d4d54cb3c..126f20ed595 100644
--- a/TAO/tao/DynamicAny/DynStruct_i.cpp
+++ b/TAO/tao/DynamicAny/DynStruct_i.cpp
@@ -51,12 +51,12 @@ void
TAO_DynStruct_i::init (const CORBA::Any& any
ACE_ENV_ARG_DECL)
{
- CORBA::TypeCode_var tc = any.type ();
- this->check_typecode (tc.in ()
+ CORBA::TypeCode_ptr tc = any._tao_get_typecode ();
+ this->check_typecode (tc
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
- this->type_ = tc;
+ this->type_ = CORBA::TypeCode::_duplicate (tc);
this->set_from_any (any
ACE_ENV_ARG_PARAMETER);
@@ -72,11 +72,12 @@ TAO_DynStruct_i::set_from_any (const CORBA::Any & any
{
// member_type() does not work with aliased type codes.
CORBA::TypeCode_var unaliased_tc =
- TAO_DynAnyFactory::strip_alias (any.type ()
+ TAO_DynAnyFactory::strip_alias (any._tao_get_typecode ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
- CORBA::ULong numfields = unaliased_tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::ULong numfields =
+ unaliased_tc->member_count (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
// Resize the array.
@@ -86,6 +87,7 @@ TAO_DynStruct_i::set_from_any (const CORBA::Any & any
// Get the CDR stream of the argument.
ACE_Message_Block *mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -94,13 +96,19 @@ TAO_DynStruct_i::set_from_any (const CORBA::Any & any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
// If we have an exception type, unmarshal the repository ID.
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (any.type ()
+ CORBA::TCKind kind = TAO_DynAnyFactory::unalias (any._tao_get_typecode ()
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
@@ -174,8 +182,9 @@ TAO_DynStruct_i::init (CORBA::TypeCode_ptr tc
ACE_CHECK;
// Recursively initialize each member.
- this->da_members_[i] = TAO_DynAnyFactory::make_dyn_any (mtype.in ()
- ACE_ENV_ARG_PARAMETER);
+ this->da_members_[i] =
+ TAO_DynAnyFactory::make_dyn_any (mtype.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
@@ -501,7 +510,8 @@ TAO_DynStruct_i::set_members_as_dyn_any (
this->da_members_[i]->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
- this->da_members_[i] = values[i].value->copy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ this->da_members_[i] =
+ values[i].value->copy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
}
@@ -525,14 +535,16 @@ TAO_DynStruct_i::from_any (const CORBA::Any & any
}
CORBA::TypeCode_var tc = any.type ();
- CORBA::Boolean equivalent = this->type_->equivalent (tc.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean equivalent =
+ this->type_->equivalent (tc.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (equivalent)
{
// Get the CDR stream of the argument.
ACE_Message_Block* mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -541,14 +553,21 @@ TAO_DynStruct_i::from_any (const CORBA::Any & any
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
// If we have an exception type, unmarshal the repository ID.
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (this->type_.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::TCKind kind =
+ TAO_DynAnyFactory::unalias (this->type_.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (kind == CORBA::tk_except)
@@ -623,13 +642,17 @@ TAO_DynStruct_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
out_cdr << this->type_->id ();
}
+ bool type_known = false;
+
for (CORBA::ULong i = 0; i < this->component_count_; ++i)
{
- CORBA::TypeCode_var field_tc = this->da_members_[i]->type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::TypeCode_var field_tc =
+ this->da_members_[i]->type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
// Recursive step.
- CORBA::Any_var field_any = this->da_members_[i]->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
+ CORBA::Any_var field_any =
+ this->da_members_[i]->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
ACE_Message_Block *field_mb = field_any->_tao_get_cdr ();
@@ -642,11 +665,18 @@ TAO_DynStruct_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
TAO_OutputCDR out;
field_any->impl ()->marshal_value (out);
ACE_CDR::consolidate (field_mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR field_cdr (field_mb,
field_any->_tao_byte_order ());
+ if (type_known)
+ {
+ field_mb->release ();
+ type_known = false;
+ }
+
(void) TAO_Marshal_Object::perform_append (field_tc.in (),
&field_cdr,
&out_cdr
diff --git a/TAO/tao/DynamicAny/DynUnion_i.cpp b/TAO/tao/DynamicAny/DynUnion_i.cpp
index 6b7fab49b68..2a729a07084 100644
--- a/TAO/tao/DynamicAny/DynUnion_i.cpp
+++ b/TAO/tao/DynamicAny/DynUnion_i.cpp
@@ -139,6 +139,7 @@ TAO_DynUnion_i::set_from_any (const CORBA::Any & any,
// Get the CDR stream of the argument.
ACE_Message_Block* mb = any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -147,11 +148,17 @@ TAO_DynUnion_i::set_from_any (const CORBA::Any & any,
TAO_OutputCDR out;
any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR cdr (mb,
any._tao_byte_order ());
+ if (type_known)
+ {
+ mb->release ();
+ }
+
CORBA::TypeCode_var disc_tc =
tc->discriminator_type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
@@ -222,8 +229,9 @@ TAO_DynUnion_i::set_from_any (const CORBA::Any & any,
if (match)
{
- CORBA::TypeCode_var member_tc = tc->member_type (i
- ACE_ENV_ARG_PARAMETER);
+ CORBA::TypeCode_var member_tc =
+ tc->member_type (i
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
CORBA::Any member_any;
@@ -399,8 +407,9 @@ TAO_DynUnion_i::set_discriminator (DynamicAny::DynAny_ptr value
ACE_CHECK;
// Initialize member to default value.
- this->member_ = TAO_DynAnyFactory::make_dyn_any (member_tc.in ()
- ACE_ENV_ARG_PARAMETER);
+ this->member_ =
+ TAO_DynAnyFactory::make_dyn_any (member_tc.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Named active member (CORBA 2.3.1).
@@ -488,8 +497,9 @@ TAO_DynUnion_i::set_to_default_member (ACE_ENV_SINGLE_ARG_DECL)
this->member_->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
- this->member_ = TAO_DynAnyFactory::make_dyn_any (default_tc.in ()
- ACE_ENV_ARG_PARAMETER);
+ this->member_ =
+ TAO_DynAnyFactory::make_dyn_any (default_tc.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
// Default member active (CORBA 2.3.1).
@@ -534,8 +544,9 @@ TAO_DynUnion_i::set_to_no_active_member (ACE_ENV_SINGLE_ARG_DECL)
this->discriminator_->type (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK;
- CORBA::TCKind kind = TAO_DynAnyFactory::unalias (disc_tc.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::TCKind kind =
+ TAO_DynAnyFactory::unalias (disc_tc.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
if (kind == CORBA::tk_enum)
@@ -765,6 +776,7 @@ TAO_DynUnion_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
ACE_CHECK_RETURN (0);
ACE_Message_Block *disc_mb = disc_any->_tao_get_cdr ();
+ bool type_known = false;
if (disc_mb == 0)
{
@@ -774,11 +786,18 @@ TAO_DynUnion_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
TAO_OutputCDR out;
disc_any->impl ()->marshal_value (out);
ACE_CDR::consolidate (disc_mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR disc_cdr (disc_mb,
disc_any->_tao_byte_order ());
+ if (type_known)
+ {
+ disc_mb->release ();
+ type_known = false;
+ }
+
(void) TAO_Marshal_Object::perform_append (disc_tc.in (),
&disc_cdr,
&out_cdr
@@ -788,32 +807,40 @@ TAO_DynUnion_i::to_any (ACE_ENV_SINGLE_ARG_DECL)
// Add the member to the CDR stream unless it has no active member.
if (this->has_no_active_member () == 0)
{
- CORBA::TypeCode_var member_tc = this->member_->type (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
+ CORBA::TypeCode_var member_tc =
+ this->member_->type (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
- CORBA::Any_var member_any = this->member_->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
+ CORBA::Any_var member_any =
+ this->member_->to_any (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
- ACE_Message_Block *member_mb = member_any->_tao_get_cdr ();
-
- if (member_mb == 0)
- {
- ACE_NEW_RETURN (member_mb,
- ACE_Message_Block,
- 0);
- TAO_OutputCDR out;
- member_any->impl ()->marshal_value (out);
- ACE_CDR::consolidate (member_mb, out.begin ());
- }
+ ACE_Message_Block *member_mb = member_any->_tao_get_cdr ();
+
+ if (member_mb == 0)
+ {
+ ACE_NEW_RETURN (member_mb,
+ ACE_Message_Block,
+ 0);
+ TAO_OutputCDR out;
+ member_any->impl ()->marshal_value (out);
+ ACE_CDR::consolidate (member_mb, out.begin ());
+ type_known = true;
+ }
- TAO_InputCDR member_cdr (member_mb,
- member_any->_tao_byte_order ());
+ TAO_InputCDR member_cdr (member_mb,
+ member_any->_tao_byte_order ());
+
+ if (type_known)
+ {
+ member_mb->release ();
+ }
- (void) TAO_Marshal_Object::perform_append (member_tc.in (),
- &member_cdr,
- &out_cdr
- ACE_ENV_ARG_PARAMETER);
- ACE_CHECK_RETURN (0);
+ (void) TAO_Marshal_Object::perform_append (member_tc.in (),
+ &member_cdr,
+ &out_cdr
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (0);
}
// Make the Any.
@@ -859,8 +886,9 @@ TAO_DynUnion_i::equal (DynamicAny::DynAny_ptr rhs
return 0;
}
- CORBA::Boolean equivalent = this->type_->equivalent (impl->type_.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean equivalent =
+ this->type_->equivalent (impl->type_.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
if (!equivalent)
@@ -868,8 +896,9 @@ TAO_DynUnion_i::equal (DynamicAny::DynAny_ptr rhs
return 0;
}
- CORBA::Boolean member_equal = this->member_->equal (impl->member_.in ()
- ACE_ENV_ARG_PARAMETER);
+ CORBA::Boolean member_equal =
+ this->member_->equal (impl->member_.in ()
+ ACE_ENV_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
CORBA::Boolean disc_equal =
@@ -1056,6 +1085,7 @@ TAO_DynUnion_i::label_match (const CORBA::Any &my_any,
CORBA::ULong my_val;
CORBA::ULong other_val;
ACE_Message_Block *mb = my_any._tao_get_cdr ();
+ bool type_known = false;
if (mb == 0)
{
@@ -1065,10 +1095,17 @@ TAO_DynUnion_i::label_match (const CORBA::Any &my_any,
TAO_OutputCDR out;
my_any.impl ()->marshal_value (out);
ACE_CDR::consolidate (mb, out.begin ());
+ type_known = true;
}
TAO_InputCDR my_cdr (mb,
my_any._tao_byte_order ());
+
+ if (type_known)
+ {
+ mb->release ();
+ }
+
my_cdr.read_ulong (my_val);
mb = other_any._tao_get_cdr ();
TAO_InputCDR other_cdr (mb,