summaryrefslogtreecommitdiff
path: root/TAO/tao/ORB_Core.cpp
diff options
context:
space:
mode:
authorvzykov <vzykov@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2010-07-21 10:04:02 +0000
committervzykov <vzykov@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2010-07-21 10:04:02 +0000
commit0a5a03c75cde7f68695ada98646c147413520a23 (patch)
treec5486250411f36a24837d8322ac1fe93fcd24ca8 /TAO/tao/ORB_Core.cpp
parentb4681974e4e9ed4b999e2b0c7db9d19724ee03b7 (diff)
downloadATCD-0a5a03c75cde7f68695ada98646c147413520a23.tar.gz
Wed Jul 21 09:57:34 UTC 2010 Vladimir Zykov <vladimir.zykov@prismtech.com>
* tao/ORB_Core_TSS_Resources.cpp: * tao/ORB_Core.cpp: * tao/ORB_Core.inl: * tao/ORB_Core_TSS_Resources.h: * tao/ORB_Core.h: Fixed bug 2533. Now ORB_Core's TSS resources are cleaned during orb destroy. * tests/Portable_Interceptors/Slot/driver.cpp: Explicitely destroy orb since doing this implicitely when main() returns is too late.
Diffstat (limited to 'TAO/tao/ORB_Core.cpp')
-rw-r--r--TAO/tao/ORB_Core.cpp9
1 files changed, 9 insertions, 0 deletions
diff --git a/TAO/tao/ORB_Core.cpp b/TAO/tao/ORB_Core.cpp
index 86ebf2365e5..092e3a10528 100644
--- a/TAO/tao/ORB_Core.cpp
+++ b/TAO/tao/ORB_Core.cpp
@@ -2368,6 +2368,15 @@ TAO_ORB_Core::destroy (void)
// Invoke Interceptor::destroy() on all registered interceptors.
this->destroy_interceptors ();
+ // Clean TSS resources. This cannot be done in shutdown() since the later
+ // can be called during an upcall and once it's done it will remove
+ // resources such as PICurrent that are required after the upcall. And this
+ // cannot be postponed to TAO_ORB_Core's destructor as fini() needs access
+ // to orb core and what is more important orb core can be destroyed too late
+ // when some required libraries are already unloaded and we'll get
+ // 'pure virtual method called' during cleanup.
+ this->get_tss_resources ()->fini ();
+
// Now remove it from the ORB table so that it's ORBid may be
// reused.
TAO::ORB_Table::instance ()->unbind (this->orbid_);