diff options
Diffstat (limited to 'qpid/cpp/src/qpid/broker/Queue.cpp')
-rw-r--r-- | qpid/cpp/src/qpid/broker/Queue.cpp | 18 |
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. +} |