From a058f16113efa8f32eb5503d5443aa139754d479 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Sat, 5 Jan 2013 10:39:08 -0800 Subject: [PATCH] msg/Pipe: associate sending msgs to con inside lock Associate a sending message with the connection inside the pipe_lock. This way if a racing thread tries to steal these messages it will be sure to reset the con point *after* we do such that it the con pointer is valid in encode_payload() (and later). This may be part of #3678. Signed-off-by: Sage Weil --- src/msg/Pipe.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/msg/Pipe.cc b/src/msg/Pipe.cc index bf8c4566d69..aacc0109496 100644 --- a/src/msg/Pipe.cc +++ b/src/msg/Pipe.cc @@ -1466,13 +1466,14 @@ void Pipe::writer() sent.push_back(m); m->get(); } - pipe_lock.Unlock(); - - ldout(msgr->cct,20) << "writer encoding " << m->get_seq() << " " << m << " " << *m << dendl; // associate message with Connection (for benefit of encode_payload) m->set_connection(connection_state->get()); + pipe_lock.Unlock(); + + ldout(msgr->cct,20) << "writer encoding " << m->get_seq() << " " << m << " " << *m << dendl; + // encode and copy out of *m m->encode(connection_state->get_features(), !msgr->cct->_conf->ms_nocrc);