diff options
author | sma <sma@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2012-03-27 12:19:59 +0000 |
---|---|---|
committer | sma <sma@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2012-03-27 12:19:59 +0000 |
commit | b582e93d1fa1b7e193b3d6ca14b4a356b4ec6503 (patch) | |
tree | 2d2fed690b1cd70d5cf0aba8520893cb2bffcba8 | |
parent | 3191d9ff01626042e77130c5c5c0558e055c4187 (diff) | |
download | ATCD-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/ChangeLog | 9 | ||||
-rw-r--r-- | TAO/tao/Compression/Compression_Manager.cpp | 38 | ||||
-rw-r--r-- | TAO/tao/Compression/Compression_Manager.h | 3 | ||||
-rw-r--r-- | TAO/tao/ORB_Core.cpp | 2 |
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_); |