messages: MForward: get() message reference

Don't simply put() a reference if it has gone unclaimed without
get()'ing it first. This can cause nefarious consequences for those
users of MForward that do not expect this to happen.

Signed-off-by: Joao Eduardo Luis <joao@suse.de>
This commit is contained in:
Joao Eduardo Luis 2015-07-14 16:52:35 +01:00
parent 7e543601e6
commit f2e240ab8e

View File

@ -102,12 +102,12 @@ public:
}
void set_message(PaxosServiceMessage *m, uint64_t features) {
encode_message(m, features, msg_bl);
// keep a pointer to the message. We will not use it except for print(),
// and we will drop it in the dtor if it is not claimed.
// get a reference to the message. We will not use it except for print(),
// and we will put it in the dtor if it is not claimed.
// we could avoid doing this if only we had a const bufferlist iterator :)
msg = m;
msg = (PaxosServiceMessage*)m->get();
encode_message(m, features, msg_bl);
}
PaxosServiceMessage *claim_message() {
@ -115,6 +115,7 @@ public:
return get_msg_from_bl();
}
// let whoever is claiming the message deal with putting it.
PaxosServiceMessage *m = msg;
msg = NULL;
return m;