From 755c41aa9b39777e5316eceff0006d3f02b626c2 Mon Sep 17 00:00:00 2001 From: Gordon Sim Date: Mon, 16 Aug 2010 09:27:57 +0000 Subject: Fix locking in receiver impl; protect session member against concurrent fetch and init. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@985838 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'cpp/src/qpid/client') diff --git a/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp b/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp index fb5675c129..6acd0a3ced 100644 --- a/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp +++ b/cpp/src/qpid/client/amqp0_10/ReceiverImpl.cpp @@ -173,8 +173,13 @@ bool ReceiverImpl::fetchImpl(qpid::messaging::Message& message, qpid::messaging: if (getImpl(message, timeout)) { return true; } else { - if (state == CANCELLED) return false; // Might have been closed during get. - sync(session).messageFlush(destination); + qpid::client::Session s; + { + sys::Mutex::ScopedLock l(lock); + if (state == CANCELLED) return false; // Might have been closed during get. + s = sync(session); + } + s.messageFlush(destination); { sys::Mutex::ScopedLock l(lock); startFlow(l); //reallocate credit -- cgit v1.2.1