summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-07-22 21:40:03 +0000
committerdengg <dengg@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-07-22 21:40:03 +0000
commit2429b31c4141eeed11b8ad45f7d1d5cc0852a5ee (patch)
tree45dd43d9cc40e5213c7bdfd51f60e147b63fe8c8
parente81334e9e58e2f2e36a6a45106676f0c97e51e57 (diff)
downloadATCD-2429b31c4141eeed11b8ad45f7d1d5cc0852a5ee.tar.gz
Jul 22 21:34:57 UTC 2006 Gan Deng <gan.deng@vanderbilt.edu>
-rw-r--r--TAO/CIAO/ChangeLog16
-rw-r--r--TAO/CIAO/ciao/Container_Base.cpp15
2 files changed, 31 insertions, 0 deletions
diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog
index 8b6e9183ac5..0e4cf676c36 100644
--- a/TAO/CIAO/ChangeLog
+++ b/TAO/CIAO/ChangeLog
@@ -1,3 +1,19 @@
+Sat Jul 22 21:34:57 UTC 2006 Gan Deng <gan.deng@vanderbilt.edu>
+
+ * ciao/Container_Base.cpp
+
+ Fixed a runtime Segfault bug about destroying POA. The problem
+ is because a Session_Container creates 2 POAs, one of which is called
+ facet_cons_POA which uses the Servant_Activator policy to activate component
+ ports (facets, consumers) on demand, then the Servant_Activator object
+ was deleted when the Session_Container object is out of scope in its
+ destructor. But when the ORB finally shuts itself down, it tries
+ to clean all the resources including the facet_cons_POA, since the
+ Servant_Activator attached to this POA is long gone, a segfault
+ occurs in the cleaning up phase. The right fix is to destroy all the POAs
+ associated with this Session_Container in its destructor together with the
+ Servant_Activator.
+
Thu Jul 20 22:03:31 UTC 2006 Nanbor Wang <nanbor (at) txcorp (dot) com>
* docs/schema/ServerResourceUsage.txt: Revised the document to
diff --git a/TAO/CIAO/ciao/Container_Base.cpp b/TAO/CIAO/ciao/Container_Base.cpp
index 40374934f01..05dc0e9bcd4 100644
--- a/TAO/CIAO/ciao/Container_Base.cpp
+++ b/TAO/CIAO/ciao/Container_Base.cpp
@@ -68,6 +68,21 @@ namespace CIAO
Session_Container::~Session_Container (void)
{
+ if (! CORBA::is_nil (this->component_poa_))
+ {
+ this->component_poa_->destroy (1, 1);
+ }
+
+ if (! CORBA::is_nil (this->facet_cons_poa_))
+ {
+ this->facet_cons_poa_->destroy (1, 1);
+ }
+
+ if (! CORBA::is_nil (this->home_servant_poa_))
+ {
+ this->home_servant_poa_->destroy (1, 1);
+ }
+
delete this->sa_;
}