diff options
Diffstat (limited to 'TAO/CIAO')
-rw-r--r-- | TAO/CIAO/ChangeLog | 16 | ||||
-rw-r--r-- | TAO/CIAO/ciao/Container_Base.cpp | 15 |
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_; } |