diff options
author | Phil Mesnier <mesnier_p@ociweb.com> | 2013-04-30 15:24:14 +0000 |
---|---|---|
committer | Phil Mesnier <mesnier_p@ociweb.com> | 2013-04-30 15:24:14 +0000 |
commit | 57224b8485ba33b6f31fa4f2b60a4710e1d4b85e (patch) | |
tree | 925a8f5693f3bf46c4f510260ba2826902d38ee7 | |
parent | 02529e9fa519d491fbd06fe7d7be06dda88f3d16 (diff) | |
download | ATCD-57224b8485ba33b6f31fa4f2b60a4710e1d4b85e.tar.gz |
Tue Apr 30 15:18:30 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r-- | TAO/ChangeLog | 14 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp | 13 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h | 1 | ||||
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp | 7 |
4 files changed, 32 insertions, 3 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 974ea36db2a..5af0953caea 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,17 @@ +Tue Apr 30 15:18:30 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com> + + * orbsvcs/ImplRepo_Service/AsyncAccessManager.h: + * orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp: + * orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp: + + Add handling of child death notification during the server + start up process. This is necessary on unix style platforms + where the activator will "succeed" with a fork and later + fail the exec. This puts the locator in a state of expecting + a server_is_running that will never come. For this to work, + the Activator must be run with the -l option to notify the + locator of child death. + Mon Apr 29 16:35:35 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com> * bin/tao_other_tests.lst: diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp index 321680b3dab..4cfe53ee5e4 100644 --- a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp @@ -223,14 +223,21 @@ AsyncAccessManager::server_is_running (const char *partial_ior, } void -AsyncAccessManager::ping_replied (LiveStatus server) +AsyncAccessManager::notify_child_death (void) { if (ImR_Locator_i::debug () > 2) { ORBSVCS_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) AsyncAccessManager, status = %d\n"), - server)); + ACE_TEXT ("(%P|%t) AsyncAccessManager, child death\n"))); } + this->status (AAM_SERVER_DEAD); + this->final_state (); +} + + +void +AsyncAccessManager::ping_replied (LiveStatus server) +{ switch (server) { case LS_ALIVE: diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h index 358d4efebbd..1cfc0ea33d8 100644 --- a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h +++ b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h @@ -84,6 +84,7 @@ class AsyncAccessManager void server_is_running (const char *partial_ior, ImplementationRepository::ServerObject_ptr ref); void server_is_shutting_down (void); + void notify_child_death (void); void ping_replied (LiveStatus server); AsyncAccessManager *add_ref (void); diff --git a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp index 912c88e0276..5eb152c0434 100644 --- a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp @@ -405,6 +405,13 @@ ImR_Locator_i::notify_child_death ORBSVCS_DEBUG ((LM_DEBUG, ACE_TEXT ("ImR: Failed to find server in repository.\n"))); } + + AsyncAccessManager_ptr aam(this->find_aam (name)); + if (*aam != 0) + { + aam->notify_child_death (); + } + _tao_rh->notify_child_death (); } |