summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsma <sma@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2012-03-27 12:19:59 +0000
committersma <sma@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2012-03-27 12:19:59 +0000
commitb582e93d1fa1b7e193b3d6ca14b4a356b4ec6503 (patch)
tree2d2fed690b1cd70d5cf0aba8520893cb2bffcba8
parent3191d9ff01626042e77130c5c5c0558e055c4187 (diff)
downloadATCD-b582e93d1fa1b7e193b3d6ca14b4a356b4ec6503.tar.gz
Tue Mar 27 13:19:00 UTC 2012 Simon Massey <simon dot massey at prismtech dot com>
Release the compression_manager_ in TAO_ORB_Core::fini() & Deletion bug-fixes.
-rw-r--r--TAO/ChangeLog9
-rw-r--r--TAO/tao/Compression/Compression_Manager.cpp38
-rw-r--r--TAO/tao/Compression/Compression_Manager.h3
-rw-r--r--TAO/tao/ORB_Core.cpp2
4 files changed, 35 insertions, 17 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index 33f48f44e39..8afbde3df15 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,12 @@
+Tue Mar 27 13:17:00 UTC 2012 Simon Massey <simon dot massey at prismtech dot com>
+
+ * tao/ORB_Core.cpp:
+ Release the compression_manager_ in TAO_ORB_Core::fini().
+
+ * tao/Compression/Compression_Manager.cpp:
+ * tao/Compression/Compression_Manager.h:
+ Deletion bug-fixes.
+
Tue Mar 27 10:40:00 UTC 2012 Simon Massey <simon dot massey at prismtech dot com>
* tests/ZIOP/client.cpp:
diff --git a/TAO/tao/Compression/Compression_Manager.cpp b/TAO/tao/Compression/Compression_Manager.cpp
index da8d1f7d739..e3d14b91214 100644
--- a/TAO/tao/Compression/Compression_Manager.cpp
+++ b/TAO/tao/Compression/Compression_Manager.cpp
@@ -7,6 +7,12 @@ TAO_BEGIN_VERSIONED_NAMESPACE_DECL
namespace TAO
{
+ CompressionManager::~CompressionManager ()
+ {
+ // Require to guard the deletion of the list
+ ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
+ this->factories_.length (0u);
+ }
void
CompressionManager::register_factory (::Compression::CompressorFactory_ptr
@@ -17,7 +23,7 @@ namespace TAO
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
CORBA::ULong const length = this->factories_.length ();
- for (CORBA::ULong i = 0; i < length; ++i)
+ for (CORBA::ULong i = 0u; i < length; ++i)
{
::Compression::CompressorId const current =
this->factories_[i]->compressor_id ();
@@ -27,7 +33,7 @@ namespace TAO
throw ::Compression::FactoryAlreadyRegistered ();
}
}
- factories_.length (length + 1);
+ factories_.length (length + 1u);
factories_[length] = ::Compression::CompressorFactory::_duplicate (
compressor_factory);
}
@@ -43,22 +49,24 @@ namespace TAO
compressor_id)
{
ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, this->mutex_);
-
CORBA::ULong const length = this->factories_.length ();
- for (CORBA::ULong i = 0; i < length; ++i)
+ for (CORBA::ULong i = 0u; i < length; ++i)
{
::Compression::CompressorId const current =
this->factories_[i]->compressor_id ();
- if (current != compressor_id)
+ if (current == compressor_id)
{
- continue;
+ // Shuffle down the remainder
+ while (i < length-1u)
+ {
+ this->factories_[i] = this->factories_[i+1u];
+ ++i;
+ }
+ this->factories_.length (length - 1u);
+ return;
}
-
- this->factories_[i] = ::Compression::CompressorFactory::_nil ();
- // make sequence smaller
- return;
}
// todo exception
@@ -73,18 +81,16 @@ namespace TAO
CORBA::ULong const length = this->factories_.length ();
- for (CORBA::ULong i = 0; i < length; ++i)
+ for (CORBA::ULong i = 0u; i < length; ++i)
{
::Compression::CompressorId const current =
this->factories_[i]->compressor_id ();
- if (current != compressor_id)
+ if (current == compressor_id)
{
- continue;
+ return ::Compression::CompressorFactory::_duplicate (
+ this->factories_[i]);
}
-
- return ::Compression::CompressorFactory::_duplicate (
- this->factories_[i]);
}
throw ::Compression::UnknownCompressorId ();
diff --git a/TAO/tao/Compression/Compression_Manager.h b/TAO/tao/Compression/Compression_Manager.h
index c59b6e0d653..290b8a31cfc 100644
--- a/TAO/tao/Compression/Compression_Manager.h
+++ b/TAO/tao/Compression/Compression_Manager.h
@@ -32,6 +32,8 @@ namespace TAO
public virtual ::Compression::CompressionManager,
public virtual ::CORBA::LocalObject
{
+ virtual ~CompressionManager ();
+
virtual void register_factory (::Compression::CompressorFactory_ptr
compressor_factory);
@@ -56,5 +58,4 @@ namespace TAO
TAO_END_VERSIONED_NAMESPACE_DECL
#include /**/ "ace/post.h"
-
#endif /* TAO_COMPRESSION_MANAGER_H */
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 774271bdfa5..12e4a1a3ad2 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -1459,6 +1459,8 @@ TAO_ORB_Core::fini (void)
::CORBA::release (this->codec_factory_);
+ ::CORBA::release (this->compression_manager_);
+
::CORBA::release (this->dynany_factory_);
::CORBA::release (this->ior_manip_factory_);