summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2013-04-30 15:24:14 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2013-04-30 15:24:14 +0000
commit57224b8485ba33b6f31fa4f2b60a4710e1d4b85e (patch)
tree925a8f5693f3bf46c4f510260ba2826902d38ee7
parent02529e9fa519d491fbd06fe7d7be06dda88f3d16 (diff)
downloadATCD-57224b8485ba33b6f31fa4f2b60a4710e1d4b85e.tar.gz
Tue Apr 30 15:18:30 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r--TAO/ChangeLog14
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp13
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h1
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp7
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 ();
}