From a56816f9ab5b5c62ef660564079a1cbfbb323931 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Thu, 1 Nov 2007 14:44:30 +0000 Subject: locking around access to the unacked out buffer git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@591026 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/framing/SessionState.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'cpp/src/qpid/framing/SessionState.cpp') diff --git a/cpp/src/qpid/framing/SessionState.cpp b/cpp/src/qpid/framing/SessionState.cpp index 8056f4a523..8e5c9d34fc 100644 --- a/cpp/src/qpid/framing/SessionState.cpp +++ b/cpp/src/qpid/framing/SessionState.cpp @@ -80,8 +80,10 @@ boost::optional SessionState::received(const AMQFrame& f) { bool SessionState::sent(const AMQFrame& f) { if (isSessionCommand(f)) return false; - if (resumable) + if (resumable) { + sys::Mutex::ScopedLock l(unackedLock); unackedOut.push_back(f); + } ++lastSent; QPID_LOG(trace, "Sent # "<< lastSent << " " << id); return ackInterval && @@ -91,6 +93,7 @@ bool SessionState::sent(const AMQFrame& f) { } SessionState::Replay SessionState::replay() { + sys::Mutex::ScopedLock l(unackedLock); Replay r(unackedOut.size()); std::copy(unackedOut.begin(), unackedOut.end(), r.begin()); return r; @@ -102,8 +105,10 @@ void SessionState::receivedAck(SequenceNumber acked) { if (lastSent < acked) throw InvalidArgumentException("Invalid sequence number in ack"); size_t keep = lastSent - acked; - if (keep < unackedOut.size()) + if (keep < unackedOut.size()) { + sys::Mutex::ScopedLock l(unackedLock); unackedOut.erase(unackedOut.begin(), unackedOut.end()-keep); + } solicitAckAt = std::max(solicitAckAt, SequenceNumber(acked+ackInterval)); } -- cgit v1.2.1