summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-01-19 21:37:11 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-01-19 21:37:11 +0000
commitbf0dec9c7b637910eb85211f7056dec2b717b76a (patch)
treebb4fde20f66ad6eb2bd47114265c8ecfedf69637
parentf7d89481d724a5c579d24b6909152139c8bea6c3 (diff)
downloadATCD-bf0dec9c7b637910eb85211f7056dec2b717b76a.tar.gz
ChangeLogTag:Mon Jan 19 15:36:10 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r--TAO/ChangeLog-98c7
-rw-r--r--TAO/tao/sequence_T.cpp23
-rw-r--r--TAO/tao/sequence_T.i4
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_)