summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Mesnier <mesnier_p@ociweb.com>2013-04-01 21:30:23 +0000
committerPhil Mesnier <mesnier_p@ociweb.com>2013-04-01 21:30:23 +0000
commit0d66f24929411d0536d137ef2caccc1f5cdbfaad (patch)
tree964a2946cae0abdd389097264935ebc3865ef175
parent23de61f9a56c2637fed2436b54838bd02d87a2a0 (diff)
downloadATCD-0d66f24929411d0536d137ef2caccc1f5cdbfaad.tar.gz
Mon Apr 1 21:28:42 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
-rw-r--r--TAO/ChangeLog_Asynch_ImR16
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp172
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h65
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp53
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.h4
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp51
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/LiveCheck.h2
-rw-r--r--TAO/utils/logWalker/Log.cpp6
8 files changed, 297 insertions, 72 deletions
diff --git a/TAO/ChangeLog_Asynch_ImR b/TAO/ChangeLog_Asynch_ImR
index 5d78c937690..bae48aa3f08 100644
--- a/TAO/ChangeLog_Asynch_ImR
+++ b/TAO/ChangeLog_Asynch_ImR
@@ -1,3 +1,19 @@
+Mon Apr 1 21:28:42 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
+
+ * orbsvcs/ImplRepo_Service/AsyncAccessManager.h:
+ * orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp:
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.h:
+ * orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp:
+ * orbsvcs/ImplRepo_Service/LiveCheck.h:
+ * orbsvcs/ImplRepo_Service/LiveCheck.cpp:
+
+ Improve memory management.
+
+ * utils/logWalker/Log.cpp:
+
+ Improve handling of nested client/server connection
+ completions.
+
Mon Apr 1 15:51:42 UTC 2013 Phil Mesnier <mesnier_p@ociweb.com>
* orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp:
diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp
index 63713bd5204..16d01398260 100644
--- a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp
+++ b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.cpp
@@ -5,8 +5,6 @@
#include "ImR_Locator_i.h"
#include "Locator_Repository.h"
-
-
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
@@ -29,6 +27,7 @@ AsyncAccessManager::AsyncAccessManager (const Server_Info &info,
AsyncAccessManager::~AsyncAccessManager (void)
{
+ ACE_DEBUG ((LM_DEBUG, "AAM (%x): dtor\n", this));
delete this->info_;
}
@@ -58,6 +57,10 @@ AsyncAccessManager::add_interest (ImR_ResponseHandler *rh)
if (this->locator_.pinger().is_alive (this->info_->name.c_str()))
{
this->final_state();
+ ACE_DEBUG ((LM_DEBUG,
+ ACE_TEXT ("(%P|%t) AsyncAccessManager::add_interest: ")
+ ACE_TEXT ("server = <%C>, server is alive\n"),
+ this->info_->name.c_str()));
return;
}
}
@@ -68,7 +71,7 @@ AsyncAccessManager::add_interest (ImR_ResponseHandler *rh)
// the pinger and will delete itself when done.
AsyncLiveListener *l = 0;
ACE_NEW (l, AsyncLiveListener (this->info_->name.c_str(),
- *this,
+ this,
this->locator_.pinger()));
if (!l->start())
{
@@ -140,7 +143,8 @@ AsyncAccessManager::final_state (void)
if (this->info_->activation_mode == ImplementationRepository::PER_CLIENT ||
this->status_ != AAM_SERVER_READY)
{
- this->locator_.remove_aam (this);
+ AsyncAccessManager_ptr aam (this);
+ this->locator_.remove_aam (aam);
}
}
@@ -179,6 +183,13 @@ AsyncAccessManager::activator_replied (bool success)
}
void
+AsyncAccessManager::server_is_shutting_down (void)
+{
+ this->status (AAM_SERVER_DEAD);
+ this->final_state ();
+}
+
+void
AsyncAccessManager::server_is_running (const char *partial_ior)
{
if (this->locator_.debug() > 0)
@@ -201,7 +212,7 @@ AsyncAccessManager::server_is_running (const char *partial_ior)
// the pinger and will delete itself when done.
AsyncLiveListener *l = 0;
ACE_NEW (l, AsyncLiveListener (this->info_->name.c_str(),
- *this,
+ this,
this->locator_.pinger()));
if (!l->start())
{
@@ -282,17 +293,21 @@ AsyncAccessManager::send_start_request (void)
return true;
}
-void
+AsyncAccessManager *
AsyncAccessManager::add_ref (void)
{
- ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, mon, this->lock_, 0);
++this->refcount_;
+
+ ACE_DEBUG ((LM_DEBUG, "AAM (%x): add_ref count now = %d\n", this, this->refcount_));
+ return this;
}
void
AsyncAccessManager::remove_ref (void)
{
ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
+ ACE_DEBUG ((LM_DEBUG, "AAM (%x): remove_ref count pre decr = %d\n", this, this->refcount_));
if (--this->refcount_ == 0)
{
delete this;
@@ -302,18 +317,134 @@ AsyncAccessManager::remove_ref (void)
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
+AsyncAccessManager_ptr::AsyncAccessManager_ptr (void)
+ : val_ (0)
+{
+}
+
+AsyncAccessManager_ptr::AsyncAccessManager_ptr (AsyncAccessManager *aam)
+ :val_ (aam)
+{
+}
+
+AsyncAccessManager_ptr::AsyncAccessManager_ptr (const AsyncAccessManager_ptr &aam_ptr)
+ :val_ (aam_ptr.clone())
+{
+}
+
+AsyncAccessManager_ptr::~AsyncAccessManager_ptr (void)
+{
+ if (val_ != 0)
+ {
+ val_->remove_ref();
+ }
+}
+
+AsyncAccessManager_ptr &
+AsyncAccessManager_ptr::operator= (const AsyncAccessManager_ptr &aam_ptr)
+{
+ if (val_ != *aam_ptr)
+ {
+ if (val_ != 0)
+ {
+ val_->remove_ref();
+ }
+ val_ = aam_ptr.clone();
+ }
+ return *this;
+}
+
+AsyncAccessManager_ptr &
+AsyncAccessManager_ptr::operator= (AsyncAccessManager *aam)
+{
+ if (val_ != aam)
+ {
+ if (val_ != 0)
+ {
+ val_->remove_ref();
+ }
+ val_ = aam;
+ }
+ return *this;
+}
+
+const AsyncAccessManager *
+AsyncAccessManager_ptr::operator-> () const
+{
+ return val_;
+}
+
+const AsyncAccessManager *
+AsyncAccessManager_ptr::operator* () const
+{
+ return val_;
+}
+
+AsyncAccessManager *
+AsyncAccessManager_ptr::operator-> ()
+{
+ return val_;
+}
+
+AsyncAccessManager *
+AsyncAccessManager_ptr::operator* ()
+{
+ return val_;
+}
+
+bool
+AsyncAccessManager_ptr::operator== (const AsyncAccessManager_ptr &aam_ptr) const
+{
+ return val_ == *aam_ptr;
+}
+
+bool
+AsyncAccessManager_ptr::operator== (const AsyncAccessManager *aam) const
+{
+ return val_ == aam;
+}
+
+AsyncAccessManager *
+AsyncAccessManager_ptr::clone (void) const
+{
+ if (val_ != 0)
+ {
+ val_->add_ref();
+ }
+ return val_;
+}
+
+AsyncAccessManager *
+AsyncAccessManager_ptr::_retn (void)
+{
+ AsyncAccessManager * aam = val_;
+ val_ = 0;
+ return aam;
+}
+
+void
+AsyncAccessManager_ptr::assign (AsyncAccessManager *aam)
+{
+ if (val_ != 0)
+ {
+ val_->remove_ref();
+ }
+ val_ = aam;
+}
+
+//---------------------------------------------------------------------------
+//---------------------------------------------------------------------------
+
ActivatorReceiver::ActivatorReceiver (AsyncAccessManager *aam,
PortableServer::POA_ptr poa)
- :aam_ (aam),
+ :aam_ (aam->add_ref ()),
poa_ (PortableServer::POA::_duplicate (poa))
{
- this->aam_->add_ref ();
}
ActivatorReceiver::~ActivatorReceiver (void)
{
- this->aam_->remove_ref ();
}
void
@@ -349,19 +480,19 @@ ActivatorReceiver::shutdown_excep (Messaging::ExceptionHolder * )
//---------------------------------------------------------------------------
AsyncLiveListener::AsyncLiveListener (const char *server,
- AsyncAccessManager &aam,
+ AsyncAccessManager *aam,
LiveCheck &pinger)
:LiveListener (server),
- aam_ (aam),
+ aam_ (aam->add_ref ()),
pinger_ (pinger),
status_ (LS_UNKNOWN)
{
- this->aam_.add_ref ();
+ ACE_DEBUG ((LM_DEBUG, "AsyncLiveListener ctor, this = %x\n", this));
}
AsyncLiveListener::~AsyncLiveListener (void)
{
- this->aam_.remove_ref ();
+ ACE_DEBUG ((LM_DEBUG, "AsyncLiveListener dtor, this = %x\n", this));
}
bool
@@ -381,23 +512,14 @@ AsyncLiveListener::status_changed (LiveStatus status)
this->status_ = status;
if (status == LS_TRANSIENT)
{
- if (!this->pinger_.add_listener (this))
- {
- ACE_DEBUG ((LM_DEBUG,
- "AsyncLiveListener::status_changed, deleting(1)\n"));
- this->aam_.ping_replied (status);
- delete this;
- return true;
- }
return false;
}
else
{
ACE_DEBUG ((LM_DEBUG,
- "AsyncLiveListener::status_changed, status = %d, deleting(2)\n", status));
- this->aam_.ping_replied (status);
+ "AsyncLiveListener::status_changed, status = %d, deleting(%x)\n", status, this));
+ this->aam_->ping_replied (status);
delete this;
- return true;
}
return true;
}
diff --git a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h
index 20c1861af73..3ffe1530895 100644
--- a/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h
+++ b/TAO/orbsvcs/ImplRepo_Service/AsyncAccessManager.h
@@ -28,6 +28,21 @@ class ImR_Locator_i;
class ImR_ReplyHandler;
struct Server_Info;
+
+enum AAM_Status
+ {
+ AAM_INIT,
+ AAM_ACTIVATION_SENT,
+ AAM_WAIT_FOR_RUNNING,
+ AAM_WAIT_FOR_PING,
+ AAM_WAIT_FOR_ALIVE,
+ AAM_SERVER_READY,
+ AAM_SERVER_DEAD,
+ AAM_NOT_MANUAL,
+ AAM_NO_ACTIVATOR,
+ AAM_NO_COMMANDLINE
+ };
+
//----------------------------------------------------------------------------
/*
* @class AsyncAccessManager
@@ -48,20 +63,6 @@ struct Server_Info;
* will have its own AAM instance.
*/
-enum AAM_Status
- {
- AAM_INIT,
- AAM_ACTIVATION_SENT,
- AAM_WAIT_FOR_RUNNING,
- AAM_WAIT_FOR_PING,
- AAM_WAIT_FOR_ALIVE,
- AAM_SERVER_READY,
- AAM_SERVER_DEAD,
- AAM_NOT_MANUAL,
- AAM_NO_ACTIVATOR,
- AAM_NO_COMMANDLINE
- };
-
class AsyncAccessManager
{
public:
@@ -78,9 +79,10 @@ class AsyncAccessManager
void activator_replied (bool success);
void server_is_running (const char *partial_ior);
+ void server_is_shutting_down (void);
void ping_replied (LiveStatus server);
- void add_ref (void);
+ AsyncAccessManager *add_ref (void);
void remove_ref (void);
private:
@@ -100,7 +102,31 @@ class AsyncAccessManager
TAO_SYNCH_MUTEX lock_;
};
+class AsyncAccessManager_ptr
+{
+public:
+ AsyncAccessManager_ptr (void);
+ AsyncAccessManager_ptr (AsyncAccessManager *aam);
+ AsyncAccessManager_ptr (const AsyncAccessManager_ptr &aam_ptr);
+ ~AsyncAccessManager_ptr (void);
+
+ AsyncAccessManager_ptr &operator = (const AsyncAccessManager_ptr &aam_ptr);
+ AsyncAccessManager_ptr &operator = (AsyncAccessManager *aam);
+ const AsyncAccessManager * operator-> () const;
+ const AsyncAccessManager * operator* () const;
+ AsyncAccessManager * operator-> ();
+ AsyncAccessManager * operator* ();
+ bool operator== (const AsyncAccessManager_ptr &aam_ptr) const;
+ bool operator== (const AsyncAccessManager *aam) const;
+ AsyncAccessManager * clone (void) const;
+ AsyncAccessManager * _retn (void);
+
+ void assign (AsyncAccessManager *aam);
+
+private:
+ AsyncAccessManager * val_;
+};
//----------------------------------------------------------------------------
/*
@@ -114,7 +140,8 @@ class ActivatorReceiver :
public virtual POA_ImplementationRepository::AMI_ActivatorHandler
{
public:
- ActivatorReceiver (AsyncAccessManager *aam, PortableServer::POA_ptr poa);
+ ActivatorReceiver (AsyncAccessManager *aam,
+ PortableServer::POA_ptr poa);
virtual ~ActivatorReceiver (void);
void start_server (void);
@@ -124,7 +151,7 @@ public:
void shutdown_excep (Messaging::ExceptionHolder * excep_holder);
private:
- AsyncAccessManager *aam_;
+ AsyncAccessManager_ptr aam_;
PortableServer::POA_var poa_;
};
@@ -137,7 +164,7 @@ class AsyncLiveListener : public LiveListener
{
public:
AsyncLiveListener (const char * server,
- AsyncAccessManager &aam,
+ AsyncAccessManager *aam,
LiveCheck &pinger);
virtual ~AsyncLiveListener (void);
bool start (void);
@@ -145,7 +172,7 @@ class AsyncLiveListener : public LiveListener
bool status_changed (LiveStatus status);
private:
- AsyncAccessManager &aam_;
+ AsyncAccessManager_ptr aam_;
LiveCheck &pinger_;
LiveStatus status_;
};
diff --git a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp
index db27f743f34..2370a7080a6 100644
--- a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp
+++ b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.cpp
@@ -219,6 +219,8 @@ ImR_Locator_i::shutdown
(ImplementationRepository::AMH_AdministrationResponseHandler_ptr _tao_rh,
CORBA::Boolean activators, CORBA::Boolean servers)
{
+ this->pinger_.shutdown ();
+ this->aam_set_.reset ();
if (servers != 0 && this->repository_->servers ().current_size () > 0)
{
// Note : shutdown is oneway, so we can't throw
@@ -490,22 +492,29 @@ ImR_Locator_i::activate_server_i (UpdateableServerInfo& info,
bool manual_start,
ImR_ResponseHandler *rh)
{
- AsyncAccessManager *aam = 0;
+ AsyncAccessManager_ptr aam;
if (info->activation_mode == ImplementationRepository::PER_CLIENT)
{
- ACE_NEW (aam, AsyncAccessManager (*info, manual_start, *this));
- this->aam_set_.insert (aam);
+ AsyncAccessManager *aam_raw;
+ ACE_NEW (aam_raw, AsyncAccessManager (*info, manual_start, *this));
+ aam = aam_raw;
+ int result = this->aam_set_.insert (aam);
+ ACE_DEBUG ((LM_DEBUG, "ImR_Locator_i::activate_server_i(PC) insert_aam returned %d\n", result));
}
else
{
aam = this->find_aam (info->name.c_str());
- if (aam == 0)
+ if (*aam == 0)
{
- ACE_NEW (aam, AsyncAccessManager (*info, manual_start, *this));
- this->aam_set_.insert (aam);
+ AsyncAccessManager *aam_raw;
+ ACE_NEW (aam_raw, AsyncAccessManager (*info, manual_start, *this));
+ aam = aam_raw;
+ int result = this->aam_set_.insert (aam);
+ ACE_DEBUG ((LM_DEBUG, "ImR_Locator_i::activate_server_i insert_aam returned %d\n", result));
}
}
aam->add_interest (rh);
+ ACE_DEBUG ((LM_DEBUG, "ImR_Locator_i::activate_server_i returning\n"));
}
CORBA::Object_ptr
@@ -915,9 +924,10 @@ ImR_Locator_i::server_is_running
info.update_repo();
}
- AsyncAccessManager *aam = this->find_aam (name.c_str());
- if (aam != 0)
+ AsyncAccessManager_ptr aam(this->find_aam (name.c_str()));
+ if (*aam != 0)
aam->server_is_running (partial_ior);
+ ACE_DEBUG ((LM_DEBUG, "Server_Is_Running, aam ptr should die\n"));
}
_tao_rh->server_is_running ();
}
@@ -948,12 +958,14 @@ ImR_Locator_i::server_is_shutting_down
server));
this->pinger_.remove_server (server);
- AsyncAccessManager *aam = this->find_aam (server);
- if (aam != 0)
- {
- this->remove_aam (aam);
- }
-
+ {
+ AsyncAccessManager_ptr aam = this->find_aam (server);
+ if (*aam != 0)
+ {
+ aam->server_is_shutting_down ();
+ this->remove_aam (aam);
+ }
+ }
info.edit ()->reset ();
_tao_rh->server_is_shutting_down ();
}
@@ -1271,10 +1283,10 @@ ImR_Locator_i::root_poa (void)
}
void
-ImR_Locator_i::remove_aam (AsyncAccessManager *aam)
+ImR_Locator_i::remove_aam (AsyncAccessManager_ptr &aam)
{
+ ACE_DEBUG ((LM_DEBUG, "ImR_Locator_i::remove_aam called\n"));
this->aam_set_.remove (aam);
- aam->remove_ref();
}
AsyncAccessManager *
@@ -1284,11 +1296,12 @@ ImR_Locator_i::find_aam (const char *name)
!i.done();
i.advance ())
{
- AsyncAccessManager **entry = 0;
- i.next(entry);
- if (*entry != 0 && (*entry)->has_server (name))
+ AsyncAccessManager_ptr *entry = 0;
+ i.next (entry);
+ if (*(*entry) != 0 && (*entry)->has_server (name))
{
- return (*entry);
+ ACE_DEBUG ((LM_DEBUG, "ImR_Locator_i::find_aam add ref and return\n"));
+ return (*entry)._retn()->add_ref();
}
}
return 0;
diff --git a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.h b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.h
index 53ae2e8fb69..409347df184 100644
--- a/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.h
+++ b/TAO/orbsvcs/ImplRepo_Service/ImR_Locator_i.h
@@ -139,7 +139,7 @@ public:
PortableServer::POA_ptr root_poa (void);
Activator_Info_Ptr get_activator (const ACE_CString& name);
- void remove_aam (AsyncAccessManager *aam);
+ void remove_aam (AsyncAccessManager_ptr &aam);
AsyncAccessManager *find_aam (const char *name);
private:
@@ -183,7 +183,7 @@ private:
LiveCheck pinger_;
/// A collection of asynch activator instances
- typedef ACE_Unbounded_Set<AsyncAccessManager *> AAM_Set;
+ typedef ACE_Unbounded_Set<AsyncAccessManager_ptr> AAM_Set;
AAM_Set aam_set_;
CORBA::ORB_var orb_;
diff --git a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp
index f5087bfdffb..4368c369237 100644
--- a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp
+++ b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.cpp
@@ -105,6 +105,8 @@ LiveEntry::status (LiveStatus l)
ACE_DEBUG ((LM_DEBUG, "LiveEntry(%s)::status updating listeners, size = %d\n",
this->server_.c_str(), this->listeners_.size()));
+ Listen_Set remove;
+
LiveStatus ls = this->liveliness_;
if (ls == LS_TRANSIENT && ! this->reping_available())
ls = LS_LAST_TRANSIENT;
@@ -118,12 +120,26 @@ LiveEntry::status (LiveStatus l)
{
if ((*ll)->status_changed (this->liveliness_))
{
- ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
- this->listeners_.remove (*ll);
+ remove.insert (*ll);
}
}
}
+ {
+ ACE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
+ for (Listen_Set::ITERATOR i (remove);
+ !i.done();
+ i.advance ())
+ {
+ LiveListener **ll = 0;
+ i.next (ll);
+ if (*ll != 0)
+ {
+ this->listeners_.remove (*ll);
+ }
+ }
+ }
+
if (this->listeners_.size() > 0)
{
this->owner_->schedule_ping (this);
@@ -267,7 +283,8 @@ PingReceiver::ping_excep (Messaging::ExceptionHolder * excep_holder)
//---------------------------------------------------------------------------
LiveCheck::LiveCheck ()
- :ping_interval_()
+ :ping_interval_(),
+ running_ (false)
{
}
@@ -292,6 +309,14 @@ LiveCheck::init (CORBA::ORB_ptr orb,
this->reactor (r);
CORBA::Object_var obj = orb->resolve_initial_references ("RootPOA");
this->poa_ = PortableServer::POA::_narrow (obj.in());
+ this->running_ = true;
+}
+
+void
+LiveCheck::shutdown (void)
+{
+ this->running_ = false;
+ this->reactor()->cancel_timer (this);
}
const ACE_Time_Value &
@@ -304,7 +329,10 @@ int
LiveCheck::handle_timeout (const ACE_Time_Value &,
const void *)
{
- ACE_DEBUG ((LM_DEBUG, "LiveCheck::handle_timeout\n"));
+ ACE_DEBUG ((LM_DEBUG, "LiveCheck::handle_timeout running = %d\n", this->running_));
+ if (!this->running_)
+ return -1;
+
bool want_reping = false;
ACE_Time_Value next;
for (LiveEntryMap::iterator le (this->entry_map_);
@@ -373,6 +401,9 @@ void
LiveCheck::add_server (const char *server,
ImplementationRepository::ServerObject_ptr ref)
{
+ if (!this->running_)
+ return;
+
ACE_CString s (server);
LiveEntry *entry = 0;
ACE_NEW (entry, LiveEntry (this, server, ref));
@@ -405,6 +436,9 @@ bool
LiveCheck::add_per_client_listener (LiveListener *l,
ImplementationRepository::ServerObject_ptr ref)
{
+ if (!this->running_)
+ return false;
+
LiveEntry *entry = 0;
ACE_NEW_RETURN (entry, LiveEntry (this, 0, ref), false);
if (this->per_client_.push(entry) == 0)
@@ -419,6 +453,9 @@ LiveCheck::add_per_client_listener (LiveListener *l,
bool
LiveCheck::add_listener (LiveListener *l)
{
+ if (!this->running_)
+ return false;
+
LiveEntry *entry = 0;
ACE_CString key (l->server());
int result = entry_map_.find (key, entry);
@@ -435,6 +472,9 @@ LiveCheck::add_listener (LiveListener *l)
void
LiveCheck::schedule_ping (LiveEntry *entry)
{
+ if (!this->running_)
+ return;
+
ACE_Time_Value now (ACE_OS::time());
ACE_Time_Value next = entry->next_check ();
@@ -455,6 +495,9 @@ LiveCheck::schedule_ping (LiveEntry *entry)
LiveStatus
LiveCheck::is_alive (const char *server)
{
+ if (!this->running_)
+ return LS_DEAD;
+
if (this->ping_interval_ == ACE_Time_Value::zero)
{
return LS_ALIVE;
diff --git a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h
index 64ccad0e7fa..db658905c04 100644
--- a/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h
+++ b/TAO/orbsvcs/ImplRepo_Service/LiveCheck.h
@@ -165,6 +165,7 @@ class Locator_Export LiveCheck : public ACE_Event_Handler
~LiveCheck (void);
void init (CORBA::ORB_ptr orb, const ACE_Time_Value &interval);
+ void shutdown (void);
int handle_timeout (const ACE_Time_Value &current_time,
const void *act = 0);
@@ -199,6 +200,7 @@ class Locator_Export LiveCheck : public ACE_Event_Handler
PerClientStack per_client_;
PortableServer::POA_var poa_;
ACE_Time_Value ping_interval_;
+ bool running_;
};
#endif /* IMR_LIVECHECK_H_ */
diff --git a/TAO/utils/logWalker/Log.cpp b/TAO/utils/logWalker/Log.cpp
index f01a59df9ef..d41453a67a5 100644
--- a/TAO/utils/logWalker/Log.cpp
+++ b/TAO/utils/logWalker/Log.cpp
@@ -606,11 +606,13 @@ Log::parse_handler_open_i (bool is_ssl)
// else
// ACE_DEBUG ((LM_DEBUG,"%d: handler_open: no match waiter addr = %s\n",
// this->offset_, (waiter == 0 ? "<null>" : waiter->server_addr().c_str()) ));
-
}
}
- else
+
+ if (pp == 0)
{
+ // ACE_DEBUG ((LM_DEBUG,"%d: handler_open: calling pop_new_connection, addr = %s\n",
+ // this->offset_, addr));
pp = this->thr_->pop_new_connection();
}
if (pp == 0)