From bf0dec9c7b637910eb85211f7056dec2b717b76a Mon Sep 17 00:00:00 2001 From: coryan Date: Mon, 19 Jan 1998 21:37:11 +0000 Subject: ChangeLogTag:Mon Jan 19 15:36:10 1998 Carlos O'Ryan --- TAO/ChangeLog-98c | 7 +++++++ TAO/tao/sequence_T.cpp | 23 +++++++++++++++++------ TAO/tao/sequence_T.i | 4 ++-- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/TAO/ChangeLog-98c b/TAO/ChangeLog-98c index 2e2081f052f..ab08a5bbb05 100644 --- a/TAO/ChangeLog-98c +++ b/TAO/ChangeLog-98c @@ -1,3 +1,10 @@ +Mon Jan 19 15:36:10 1998 Carlos O'Ryan + + * tao/sequence_T.i: + * tao/sequence_T.cpp: + The last merge was too smart, it kept some changes on this + branch that should have gone away. + Mon Jan 19 13:58:01 1998 Carlos O'Ryan * TAO_IDL/be/be_visitor_interface.cpp: diff --git a/TAO/tao/sequence_T.cpp b/TAO/tao/sequence_T.cpp index efa04fdb964..c37df3a72e4 100644 --- a/TAO/tao/sequence_T.cpp +++ b/TAO/tao/sequence_T.cpp @@ -144,8 +144,6 @@ void TAO_Bounded_Sequence::_deallocate_buffer (void) template TAO_Object_Manager::~TAO_Object_Manager (void) { - if (this->release_) - T::_release (*(this->ptr_)); } template @@ -162,10 +160,15 @@ TAO_Object_Manager::operator= (const TAO_Object_Manager &rhs) if (this == &rhs) return *this; - if (this->release_) // need to free old one - CORBA::release (*this->ptr_); - - this->ptr_ = rhs.ptr_; + if (this->release_) + { + CORBA::release (*this->ptr_); + *this->ptr_ = T::_duplicate (*rhs.ptr_); + } + else + { + this->ptr_ = rhs.ptr_; + } return *this; } @@ -221,6 +224,13 @@ TAO_Unbounded_Object_Sequence (const TAO_Unbounded_Object_Sequence &seq) T* *tmp2 = ACE_reinterpret_cast(T* *,seq.buffer_); for (CORBA::ULong i=0; i < seq.length_; i++) tmp1 [i] = T::_duplicate (tmp2 [i]); + this->release_ = 1; +} + +template +TAO_Unbounded_Object_Sequence::~TAO_Unbounded_Object_Sequence (void) +{ + this->_deallocate_buffer (); } // assignment operator @@ -255,6 +265,7 @@ operator= (const TAO_Unbounded_Object_Sequence &seq) T* *tmp2 = ACE_reinterpret_cast(T* *,seq.buffer_); for (CORBA::ULong i=0; i < seq.length_; i++) tmp1 [i] = T::_duplicate (tmp2 [i]); + this->release_ = 1; return *this; } diff --git a/TAO/tao/sequence_T.i b/TAO/tao/sequence_T.i index 1ca5d8a57d7..4e05e5ea544 100644 --- a/TAO/tao/sequence_T.i +++ b/TAO/tao/sequence_T.i @@ -119,8 +119,8 @@ TAO_Bounded_Sequence::freebuf (T *buffer) // ************************************************************* template ACE_INLINE -TAO_Object_Manager::TAO_Object_Manager(T** ptr, CORBA::Boolean release) - : ptr_ (ptr), +TAO_Object_Manager::TAO_Object_Manager(T** buffer, CORBA::Boolean release) + : ptr_ (buffer), release_ (release) { if (this->release_) -- cgit v1.2.1