]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: fix occasional message leak after session reset
authorSage Weil <sage@redhat.com>
Thu, 21 Aug 2014 20:05:35 +0000 (13:05 -0700)
committerSage Weil <sage@redhat.com>
Mon, 25 Aug 2014 16:25:24 +0000 (09:25 -0700)
Consider:

 - we get a message, put it on a wait list
 - the client session resets
 - we go back to process the message later and discard
   - _ms_dispatch returns false, but nobody drops the msg ref

Since we call _ms_dispatch() a lot internally, we need to always return
true when we are an internal caller.

Fixes: #9176
Backport: firefly, dumpling
Signed-off-by: Sage Weil <sage@redhat.com>
(cherry picked from commit 19df386b2d36d716be2e6d02de0386fac9e7bc1f)

src/mon/Monitor.cc

index cd447e7cd1b1fd71465447949df16189dd098a59..c58e9894a3a8991ec78c0d053604540c0d2f57d9 100644 (file)
@@ -2866,8 +2866,9 @@ bool Monitor::_ms_dispatch(Message *m)
         return dispatch(s, m, false);
       }
       dout(1) << __func__ << " dropping stray message " << *m
-        << " from " << m->get_source_inst() << dendl;
-      return false;
+             << " from " << m->get_source_inst() << dendl;
+      m->put();
+      return true;
     }
 
     if (!exited_quorum.is_zero() && !src_is_mon) {