diff options
Diffstat (limited to 'TAO')
-rw-r--r-- | TAO/ChangeLog_ref | 13 | ||||
-rw-r--r-- | TAO/tao/Fixed_Size_Argument_T.cpp | 11 | ||||
-rw-r--r-- | TAO/tao/Fixed_Size_Argument_T.h | 2 | ||||
-rw-r--r-- | TAO/tao/Var_Array_Argument_T.cpp | 22 | ||||
-rw-r--r-- | TAO/tao/Var_Array_Argument_T.h | 2 | ||||
-rw-r--r-- | TAO/tao/Var_Size_Argument_T.cpp | 12 |
6 files changed, 41 insertions, 21 deletions
diff --git a/TAO/ChangeLog_ref b/TAO/ChangeLog_ref index 394744db133..a8762bc3c4e 100644 --- a/TAO/ChangeLog_ref +++ b/TAO/ChangeLog_ref @@ -1,3 +1,16 @@ +Thu Jul 10 16:05:26 2003 Jeff Parsons <j.parsons@vanderbilt.edu> + + * tao/Fixed_Size_Argument_T.cpp: + * tao/Fixed_Size_Argument_T.h: + * tao/Var_Array_Argument_T.cpp: + * tao/Var_Array_Argument_T.h: + * tao/Var_Size_Argument_T.cpp: + + Fixed bugs uncovered by running Param_Test. Also moved memory + allocation for OUT arguments and return values of variable size + from the constructor to the demarshal() method. This delay will + allow the allocation to be skipped for collocated calls. + Thu Jul 10 09:36:44 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * tao/Any.cpp: diff --git a/TAO/tao/Fixed_Size_Argument_T.cpp b/TAO/tao/Fixed_Size_Argument_T.cpp index aee7ca4bdf4..247aa704418 100644 --- a/TAO/tao/Fixed_Size_Argument_T.cpp +++ b/TAO/tao/Fixed_Size_Argument_T.cpp @@ -97,35 +97,36 @@ template<typename S> CORBA::Boolean TAO::Ret_Fixed_Size_Argument_T<S>::demarshal (TAO_InputCDR & cdr) { - return cdr >> *this->x_; + return cdr >> this->x_; } template<typename S> void TAO::Ret_Fixed_Size_Argument_T<S>::interceptor_result (CORBA::Any * any) { - (*any) <<= *this->x_; + (*any) <<= this->x_; } template<typename S> CORBA::Boolean TAO::Ret_Fixed_Size_Argument_T<S>::interceptor_replace (CORBA::Any & any) { - return any >>= this->x_; + S * tmp = &this->x_; + return any >>= tmp; } template<typename S> S TAO::Ret_Fixed_Size_Argument_T<S>::excp (void) { - return *this->x_; + return this->x_; } template<typename S> S TAO::Ret_Fixed_Size_Argument_T<S>::retn (void) { - return *this->x_; + return this->x_; } // ============================================================ diff --git a/TAO/tao/Fixed_Size_Argument_T.h b/TAO/tao/Fixed_Size_Argument_T.h index 64b5380a0d5..9b39dd5a7a6 100644 --- a/TAO/tao/Fixed_Size_Argument_T.h +++ b/TAO/tao/Fixed_Size_Argument_T.h @@ -105,7 +105,7 @@ namespace TAO S retn (void); protected: - S * x_; + S x_; }; /** diff --git a/TAO/tao/Var_Array_Argument_T.cpp b/TAO/tao/Var_Array_Argument_T.cpp index 9cc187dd76d..b2fec76a155 100644 --- a/TAO/tao/Var_Array_Argument_T.cpp +++ b/TAO/tao/Var_Array_Argument_T.cpp @@ -94,11 +94,8 @@ template<typename S, typename S_forany> TAO::Out_Var_Array_Argument_T<S,S_slice,S_var,S_out,S_forany>:: Out_Var_Array_Argument_T (S_out x) + : x_ (x.ptr ()) { - typedef TAO::Array_Traits<S,S_slice> ARRAY_TRAITS; - ACE_ALLOCATOR (x.ptr (), - ARRAY_TRAITS::tao_alloc ()); - this->x_ = x.ptr (); } template<typename S, @@ -111,7 +108,11 @@ TAO::Out_Var_Array_Argument_T<S,S_slice,S_var,S_out,S_forany>::demarshal ( TAO_InputCDR & cdr ) { - S_forany tmp (this->x_.ptr ()); + typedef TAO::Array_Traits<S,S_slice> ARRAY_TRAITS; + ACE_ALLOCATOR_RETURN (this->x_, + ARRAY_TRAITS::tao_alloc (), + 0); + S_forany tmp (this->x_); return cdr >> tmp; } @@ -121,11 +122,6 @@ template<typename S, typename S_slice, typename S_var, typename S_forany> TAO::Ret_Var_Array_Argument_T<S,S_slice,S_var,S_forany>:: Ret_Var_Array_Argument_T (void) { - typedef TAO::Array_Traits<S,S_slice> ARRAY_TRAITS; - S_slice * tmp = 0; - ACE_ALLOCATOR (tmp, - ARRAY_TRAITS::tao_alloc ()); - this->x_ = tmp; } template<typename S, typename S_slice, typename S_var, typename S_forany> @@ -134,6 +130,12 @@ TAO::Ret_Var_Array_Argument_T<S,S_slice,S_var,S_forany>::demarshal ( TAO_InputCDR & cdr ) { + typedef TAO::Array_Traits<S,S_slice> ARRAY_TRAITS; + S_slice * tmp_ptr = 0; + ACE_ALLOCATOR_RETURN (tmp_ptr, + ARRAY_TRAITS::tao_alloc (), + 0); + this->x_ = tmp_ptr; S_forany tmp (this->x_.ptr ()); return cdr >> tmp; } diff --git a/TAO/tao/Var_Array_Argument_T.h b/TAO/tao/Var_Array_Argument_T.h index 669191ea0cf..8fabb9d8e0d 100644 --- a/TAO/tao/Var_Array_Argument_T.h +++ b/TAO/tao/Var_Array_Argument_T.h @@ -85,7 +85,7 @@ namespace TAO virtual CORBA::Boolean demarshal (TAO_InputCDR &); private: - S_var x_; + S_slice *& x_; }; /** diff --git a/TAO/tao/Var_Size_Argument_T.cpp b/TAO/tao/Var_Size_Argument_T.cpp index be6a022194c..1f062016779 100644 --- a/TAO/tao/Var_Size_Argument_T.cpp +++ b/TAO/tao/Var_Size_Argument_T.cpp @@ -78,14 +78,15 @@ template<typename S, typename S_out> TAO::Out_Var_Size_Argument_T<S,S_out>::Out_Var_Size_Argument_T (S_out x) : x_ (x.ptr ()) { - ACE_NEW (this->x_, - S); } template<typename S, typename S_out> CORBA::Boolean TAO::Out_Var_Size_Argument_T<S,S_out>::demarshal (TAO_InputCDR & cdr) { + ACE_NEW_RETURN (this->x_, + S, + 0); return cdr >> *this->x_; } @@ -94,14 +95,17 @@ TAO::Out_Var_Size_Argument_T<S,S_out>::demarshal (TAO_InputCDR & cdr) template<typename S, typename S_var> TAO::Ret_Var_Size_Argument_T<S,S_var>::Ret_Var_Size_Argument_T (void) { - ACE_NEW (this->x_.out (), - S); } template<typename S, typename S_var> CORBA::Boolean TAO::Ret_Var_Size_Argument_T<S,S_var>::demarshal (TAO_InputCDR & cdr) { + S * tmp = 0; + ACE_NEW_RETURN (tmp, + S, + 0); + this->x_ = tmp; return cdr >> this->x_.inout (); } |