diff options
Diffstat (limited to 'TAO/orbsvcs/ImplRepo_Service')
-rw-r--r-- | TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp index a5078b1f7c2..513f5d2e2de 100644 --- a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp +++ b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp @@ -650,8 +650,8 @@ AsyncAccessManager::ping_replied (LiveStatus server) if (ImR_Locator_i::debug () > 4) { ORBSVCS_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::ping_replied pid = %d,") - ACE_TEXT (" transition to <WAIT_FOR_DEATH>\n"), + ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::ping_replied pid <%d>,") + ACE_TEXT (" waiting on ping, transition to <WAIT_FOR_DEATH>\n"), this, this->info_->pid)); } this->status (ImplementationRepository::AAM_WAIT_FOR_DEATH); @@ -660,7 +660,7 @@ AsyncAccessManager::ping_replied (LiveStatus server) if (ImR_Locator_i::debug () > 4) { ORBSVCS_DEBUG ((LM_DEBUG, - ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::ping_replied pid = %d,") + ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::ping_replied pid <%d>,") ACE_TEXT (" trying to restart server\n"), this, this->info_->pid)); } @@ -671,7 +671,31 @@ AsyncAccessManager::ping_replied (LiveStatus server) } else { - this->status (ImplementationRepository::AAM_SERVER_DEAD); + // If we get a death notify we wait for the death of the process, the fact that the + // ping failed doesn't mean the process itself is already death + if (this->info_->death_notify && this->info_->pid != 0) + { + if (ImR_Locator_i::debug () > 4) + { + ORBSVCS_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::ping_replied pid <%d>,") + ACE_TEXT (" transition to <WAIT_FOR_DEATH>\n"), + this, this->info_->pid)); + } + this->status (ImplementationRepository::AAM_WAIT_FOR_DEATH); + return; + } + else + { + if (ImR_Locator_i::debug () > 4) + { + ORBSVCS_DEBUG ((LM_DEBUG, + ACE_TEXT ("(%P|%t) AsyncAccessManager(%@)::ping_replied pid <%d>,") + ACE_TEXT (" transition to <SERVER_DEAD>\n"), + this, this->info_->pid)); + } + this->status (ImplementationRepository::AAM_SERVER_DEAD); + } } } break; |