diff options
author | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-01-19 21:37:11 +0000 |
---|---|---|
committer | coryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 1998-01-19 21:37:11 +0000 |
commit | bf0dec9c7b637910eb85211f7056dec2b717b76a (patch) | |
tree | bb4fde20f66ad6eb2bd47114265c8ecfedf69637 | |
parent | f7d89481d724a5c579d24b6909152139c8bea6c3 (diff) | |
download | ATCD-bf0dec9c7b637910eb85211f7056dec2b717b76a.tar.gz |
ChangeLogTag:Mon Jan 19 15:36:10 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r-- | TAO/ChangeLog-98c | 7 | ||||
-rw-r--r-- | TAO/tao/sequence_T.cpp | 23 | ||||
-rw-r--r-- | 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 <coryan@cs.wustl.edu> + + * 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 <coryan@cs.wustl.edu> * 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<T,MAX>::_deallocate_buffer (void) template <class T> TAO_Object_Manager<T>::~TAO_Object_Manager (void) { - if (this->release_) - T::_release (*(this->ptr_)); } template <class T> @@ -162,10 +160,15 @@ TAO_Object_Manager<T>::operator= (const TAO_Object_Manager<T> &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<T> &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<class T> +TAO_Unbounded_Object_Sequence<T>::~TAO_Unbounded_Object_Sequence (void) +{ + this->_deallocate_buffer (); } // assignment operator @@ -255,6 +265,7 @@ operator= (const TAO_Unbounded_Object_Sequence<T> &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<T,MAX>::freebuf (T *buffer) // ************************************************************* template <class T> ACE_INLINE -TAO_Object_Manager<T>::TAO_Object_Manager(T** ptr, CORBA::Boolean release) - : ptr_ (ptr), +TAO_Object_Manager<T>::TAO_Object_Manager(T** buffer, CORBA::Boolean release) + : ptr_ (buffer), release_ (release) { if (this->release_) |