From 2a1eb466d3f8e25ec8906b3ca6118a14c4e269d2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 5 Jan 2013 09:29:50 -0800 Subject: [PATCH] msg/Pipe: fix msg leak in requeue_sent() The sent list owns a reference to each message. Signed-off-by: Sage Weil --- src/msg/Pipe.cc | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/msg/Pipe.cc b/src/msg/Pipe.cc index ec9dd24045c76..bf8c4566d6945 100644 --- a/src/msg/Pipe.cc +++ b/src/msg/Pipe.cc @@ -1070,14 +1070,17 @@ void Pipe::requeue_sent(uint64_t max_acked) list& rq = out_q[CEPH_MSG_PRIO_HIGHEST]; while (!sent.empty()) { Message *m = sent.back(); + sent.pop_back(); if (m->get_seq() > max_acked) { - sent.pop_back(); ldout(msgr->cct,10) << "requeue_sent " << *m << " for resend seq " << out_seq << " (" << m->get_seq() << ")" << dendl; rq.push_front(m); out_seq--; - } else - sent.clear(); + } else { + ldout(msgr->cct,10) << "requeue_sent " << *m << " for resend seq " << out_seq + << " <= max_acked " << max_acked << ", discarding" << dendl; + m->put(); + } } } -- 2.39.5