}
};
+class ContextWQ : public ThreadPool::WorkQueueVal<Context *> {
+public:
+ ContextWQ(const string &name, time_t ti, ThreadPool *tp)
+ : ThreadPool::WorkQueueVal<Context *>(name, ti, 0, tp) {}
+
+ void queue(Context *ctx) {
+ ThreadPool::WorkQueueVal<Context *>::queue(ctx);
+ }
+
+protected:
+ virtual void _enqueue(Context *item) {
+ _queue.push_back(item);
+ }
+ virtual void _enqueue_front(Context *item) {
+ _queue.push_front(item);
+ }
+ virtual bool _empty() {
+ return _queue.empty();
+ }
+ virtual Context *_dequeue() {
+ Context *item = _queue.front();
+ _queue.pop_front();
+ return item;
+ }
+ virtual void _process(Context *item) {
+ item->complete(0);
+ }
+private:
+ list<Context *> _queue;
+};
+
class ShardedThreadPool {
CephContext *cct;