From d7bee125cb6ce812939aab39bbf40865e623742b Mon Sep 17 00:00:00 2001 From: Kenneth Anthony Giusti Date: Fri, 2 Mar 2012 14:49:56 +0000 Subject: QPID-3877: hold lock during message header encode. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1296230 13f79535-47bb-0310-9956-ffa450edef68 --- qpid/cpp/src/qpid/broker/Message.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/qpid/cpp/src/qpid/broker/Message.cpp b/qpid/cpp/src/qpid/broker/Message.cpp index ae4503328a..7093a68d6c 100644 --- a/qpid/cpp/src/qpid/broker/Message.cpp +++ b/qpid/cpp/src/qpid/broker/Message.cpp @@ -131,9 +131,12 @@ uint32_t Message::getRequiredCredit() void Message::encode(framing::Buffer& buffer) const { - //encode method and header frames - EncodeFrame f1(buffer); - frames.map_if(f1, TypeFilter2()); + { + sys::Mutex::ScopedLock l(lock); // prevent header modifications while encoding + //encode method and header frames + EncodeFrame f1(buffer); + frames.map_if(f1, TypeFilter2()); + } //then encode the payload of each content frame framing::EncodeBody f2(buffer); @@ -159,6 +162,7 @@ uint32_t Message::encodedContentSize() const uint32_t Message::encodedHeaderSize() const { + sys::Mutex::ScopedLock l(lock); // prevent modifications while computing size //add up the size for all method and header frames in the frameset SumFrameSize sum; frames.map_if(sum, TypeFilter2()); @@ -354,6 +358,7 @@ public: AMQHeaderBody* Message::getHeaderBody() { + // expects lock to be held if (copyHeaderOnWrite) { CloneHeaderBody f; frames.map_if(f, TypeFilter()); -- cgit v1.2.1