diff options
| author | Kim van der Riet <kpvdr@apache.org> | 2012-05-04 15:39:19 +0000 |
|---|---|---|
| committer | Kim van der Riet <kpvdr@apache.org> | 2012-05-04 15:39:19 +0000 |
| commit | 633c33f224f3196f3f9bd80bd2e418d8143fea06 (patch) | |
| tree | 1391da89470593209466df68c0b40b89c14963b1 /cpp/src/qpid/broker/Message.cpp | |
| parent | c73f9286ebff93a6c8dbc29cf05e258c4b55c976 (diff) | |
| download | qpid-python-633c33f224f3196f3f9bd80bd2e418d8143fea06.tar.gz | |
QPID-3858: Updated branch - merged from trunk r.1333987
git-svn-id: https://svn.apache.org/repos/asf/qpid/branches/asyncstore@1334037 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/broker/Message.cpp')
| -rw-r--r-- | cpp/src/qpid/broker/Message.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/cpp/src/qpid/broker/Message.cpp b/cpp/src/qpid/broker/Message.cpp index ae4503328a..40dfba39f4 100644 --- a/cpp/src/qpid/broker/Message.cpp +++ b/cpp/src/qpid/broker/Message.cpp @@ -131,6 +131,7 @@ uint32_t Message::getRequiredCredit() void Message::encode(framing::Buffer& buffer) const { + sys::Mutex::ScopedLock l(lock); //encode method and header frames EncodeFrame f1(buffer); frames.map_if(f1, TypeFilter2<METHOD_BODY, HEADER_BODY>()); @@ -142,6 +143,7 @@ void Message::encode(framing::Buffer& buffer) const void Message::encodeContent(framing::Buffer& buffer) const { + sys::Mutex::ScopedLock l(lock); //encode the payload of each content frame EncodeBody f2(buffer); frames.map_if(f2, TypeFilter<CONTENT_BODY>()); @@ -154,11 +156,13 @@ uint32_t Message::encodedSize() const uint32_t Message::encodedContentSize() const { + sys::Mutex::ScopedLock l(lock); return frames.getContentSize(); } 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<METHOD_BODY, HEADER_BODY>()); @@ -218,8 +222,9 @@ void Message::releaseContent() store->stage(pmsg); staged = true; } - //ensure required credit is cached before content frames are released + //ensure required credit and size is cached before content frames are released getRequiredCredit(); + contentSize(); //remove any content frames from the frameset frames.remove(TypeFilter<CONTENT_BODY>()); setContentReleased(); @@ -354,6 +359,7 @@ public: AMQHeaderBody* Message::getHeaderBody() { + // expects lock to be held if (copyHeaderOnWrite) { CloneHeaderBody f; frames.map_if(f, TypeFilter<HEADER_BODY>()); |
