From: Jason Dillaman Date: Wed, 8 Apr 2015 20:46:34 +0000 (-0400) Subject: WorkQueue: ContextWQ can now accept a return code X-Git-Tag: v0.94.4~77^2~29 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=64425e861400fde4703fb06529777c55650b6676;p=ceph.git WorkQueue: ContextWQ can now accept a return code Signed-off-by: Jason Dillaman (cherry picked from commit e5ffae578e83c1e4fca3f328c937e7c9be8cc03c) --- diff --git a/src/common/WorkQueue.h b/src/common/WorkQueue.h index d1b11b62a82f1..300ae7d7d7180 100644 --- a/src/common/WorkQueue.h +++ b/src/common/WorkQueue.h @@ -433,35 +433,36 @@ public: } }; -class ContextWQ : public ThreadPool::WorkQueueVal { +class ContextWQ : public ThreadPool::WorkQueueVal > { public: ContextWQ(const string &name, time_t ti, ThreadPool *tp) - : ThreadPool::WorkQueueVal(name, ti, 0, tp) {} + : ThreadPool::WorkQueueVal >(name, ti, 0, tp) {} - void queue(Context *ctx) { - ThreadPool::WorkQueueVal::queue(ctx); + void queue(Context *ctx, int result = 0) { + ThreadPool::WorkQueueVal >::queue( + std::make_pair(ctx, result)); } protected: - virtual void _enqueue(Context *item) { + virtual void _enqueue(std::pair item) { _queue.push_back(item); } - virtual void _enqueue_front(Context *item) { + virtual void _enqueue_front(std::pair item) { _queue.push_front(item); } virtual bool _empty() { return _queue.empty(); } - virtual Context *_dequeue() { - Context *item = _queue.front(); + virtual std::pair _dequeue() { + std::pair item = _queue.front(); _queue.pop_front(); return item; } - virtual void _process(Context *item) { - item->complete(0); + virtual void _process(std::pair item) { + item.first->complete(item.second); } private: - list _queue; + list > _queue; }; class ShardedThreadPool {