diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-11-19 20:04:20 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-11-19 20:04:20 +0000 |
commit | dcfe7536d809dba6dfb3f53a0f556d1600ecd243 (patch) | |
tree | 71394fed2d6cdddb3d069b58ac1c3d6fa4922098 /TAO/tao | |
parent | 9efeb805130bfc450dd517c94da2442d810d371a (diff) | |
download | ATCD-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.cpp | 1 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynAny_i.cpp | 6 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynArray_i.cpp | 64 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynCommon.cpp | 156 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynEnum_i.cpp | 33 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynSequence_i.cpp | 37 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynStruct_i.cpp | 60 | ||||
-rw-r--r-- | TAO/tao/DynamicAny/DynUnion_i.cpp | 105 |
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, |