summaryrefslogtreecommitdiff
path: root/qpid/cpp/src/qpid/broker/Queue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/cpp/src/qpid/broker/Queue.cpp')
-rw-r--r--qpid/cpp/src/qpid/broker/Queue.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/qpid/cpp/src/qpid/broker/Queue.cpp b/qpid/cpp/src/qpid/broker/Queue.cpp
index c3e9f4ea3a..0520099d90 100644
--- a/qpid/cpp/src/qpid/broker/Queue.cpp
+++ b/qpid/cpp/src/qpid/broker/Queue.cpp
@@ -1256,3 +1256,21 @@ void Queue::UsageBarrier::destroy()
parent.deleted = true;
while (count) parent.messageLock.wait();
}
+
+
+void Queue::DequeueCompletion::dequeueDone()
+{
+ assert(completionsNeeded.get() > 0);
+ if (--completionsNeeded == 0) {
+ assert(cb);
+ (*cb)(ctxt);
+ ctxt.reset();
+ }
+}
+
+void Queue::DequeueCompletion::registerCallback( callback *f, boost::intrusive_ptr<RefCounted>& _ctxt )
+{
+ cb = f;
+ ctxt = _ctxt;
+ dequeueDone(); // invoke callback if dequeue already done.
+}