From: Sage Weil Date: Thu, 21 Aug 2014 20:05:35 +0000 (-0700) Subject: mon: fix occasional message leak after session reset X-Git-Tag: v0.80.6~40 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4bff6f3476e5df400db3dc1f0ad7b35a2a41830e;p=ceph.git mon: fix occasional message leak after session reset 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 (cherry picked from commit 19df386b2d36d716be2e6d02de0386fac9e7bc1f) --- diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index cd447e7cd1b..c58e9894a3a 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -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) {