]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: fix leak of loopback Connection
authorSage Weil <sage@inktank.com>
Wed, 5 Jun 2013 15:53:38 +0000 (08:53 -0700)
committerSage Weil <sage@inktank.com>
Wed, 5 Jun 2013 15:53:38 +0000 (08:53 -0700)
The accessor returns a reference.  Instead of taking+dropping it each
time, take one ref in Monitor ctor and release it in the dtor.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/Monitor.cc
src/mon/Monitor.h
src/mon/PaxosService.cc

index 72fd3777a8cacaa479a6173f54921758e67efc51..dbd02d5bd782b6893d5e27aae7bb6ffeb4c2d2a7 100644 (file)
@@ -119,6 +119,7 @@ Monitor::Monitor(CephContext* cct_, string nm, MonitorDBStore *s,
   name(nm),
   rank(-1), 
   messenger(m),
+  con_self(m ? m->get_loopback_connection() : NULL),
   lock("Monitor::lock"),
   timer(cct_, lock),
   has_ever_joined(false),
@@ -208,6 +209,8 @@ Monitor::~Monitor()
   delete paxos;
   assert(session_map.sessions.empty());
   delete mon_caps;
+  if (con_self)
+    con_self->put();
 }
 
 
index b9203ae1e6150d824d837409e569cbc0503a3c62..f84efe379b54f46a0f10567213886a7ec05e14ba 100644 (file)
@@ -108,6 +108,7 @@ public:
   string name;
   int rank;
   Messenger *messenger;
+  Connection *con_self;
   Mutex lock;
   SafeTimer timer;
   
index 8840fcecc3576f88f2039888a999ee7525b55b2d..c32e77fee31aacdb8d8e27d76f9f13c51ececea2 100644 (file)
@@ -48,7 +48,7 @@ bool PaxosService::dispatch(PaxosServiceMessage *m)
   // connection will be disconnected with a null message; don't drop
   // those.  also ignore loopback (e.g., log) messages.
   if (!m->get_connection()->is_connected() &&
-      m->get_connection() != mon->messenger->get_loopback_connection() &&
+      m->get_connection() != mon->con_self &&
       m->get_connection()->get_messenger() != NULL) {
     dout(10) << " discarding message from disconnected client "
             << m->get_source_inst() << " " << *m << dendl;