]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
WorkQueue: ContextWQ can now accept a return code
authorJason Dillaman <dillaman@redhat.com>
Wed, 8 Apr 2015 20:46:34 +0000 (16:46 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 28 Jul 2015 20:34:22 +0000 (16:34 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit e5ffae578e83c1e4fca3f328c937e7c9be8cc03c)

src/common/WorkQueue.h

index d1b11b62a82f107a38cddedcbb3e258fa4cf376a..300ae7d7d71800a66a95e5938e0dad9b5e35a1e9 100644 (file)
@@ -433,35 +433,36 @@ public:
   }
 };
 
-class ContextWQ : public ThreadPool::WorkQueueVal<Context *> {
+class ContextWQ : public ThreadPool::WorkQueueVal<std::pair<Context *, int> > {
 public:
   ContextWQ(const string &name, time_t ti, ThreadPool *tp)
-    : ThreadPool::WorkQueueVal<Context *>(name, ti, 0, tp) {}
+    : ThreadPool::WorkQueueVal<std::pair<Context *, int> >(name, ti, 0, tp) {}
 
-  void queue(Context *ctx) {
-    ThreadPool::WorkQueueVal<Context *>::queue(ctx);
+  void queue(Context *ctx, int result = 0) {
+    ThreadPool::WorkQueueVal<std::pair<Context *, int> >::queue(
+      std::make_pair(ctx, result));
   }
 
 protected:
-  virtual void _enqueue(Context *item) {
+  virtual void _enqueue(std::pair<Context *, int> item) {
     _queue.push_back(item);
   }
-  virtual void _enqueue_front(Context *item) {
+  virtual void _enqueue_front(std::pair<Context *, int> item) {
     _queue.push_front(item);
   }
   virtual bool _empty() {
     return _queue.empty();
   }
-  virtual Context *_dequeue() {
-    Context *item = _queue.front();
+  virtual std::pair<Context *, int> _dequeue() {
+    std::pair<Context *, int> item = _queue.front();
     _queue.pop_front();
     return item;
   }
-  virtual void _process(Context *item) {
-    item->complete(0);
+  virtual void _process(std::pair<Context *, int> item) {
+    item.first->complete(item.second);
   }
 private:
-  list<Context *> _queue;
+  list<std::pair<Context *, int> > _queue;
 };
 
 class ShardedThreadPool {