template<typename T>
class PointerWQ : public WorkQueue_ {
public:
- PointerWQ(string n, time_t ti, time_t sti, ThreadPool* p)
- : WorkQueue_(n, ti, sti), m_pool(p), m_processing(0) {
- m_pool->add_work_queue(this);
- }
~PointerWQ() {
m_pool->remove_work_queue(this);
assert(m_processing == 0);
return _empty();
}
protected:
+ PointerWQ(string n, time_t ti, time_t sti, ThreadPool* p)
+ : WorkQueue_(n, ti, sti), m_pool(p), m_processing(0) {
+ }
virtual void _clear() {
assert(m_pool->_lock.is_locked());
m_items.clear();
ContextWQ(const string &name, time_t ti, ThreadPool *tp)
: ThreadPool::PointerWQ<Context>(name, ti, 0, tp),
m_lock("ContextWQ::m_lock") {
+ tp->add_work_queue(this);
}
void queue(Context *ctx, int result = 0) {
m_shutdown(false), m_on_shutdown(nullptr) {
CephContext *cct = m_image_ctx.cct;
ldout(cct, 5) << this << " " << ": ictx=" << image_ctx << dendl;
+ tp->add_work_queue(this);
}
ssize_t AioImageRequestWQ::read(uint64_t off, uint64_t len, char *buf,