ceph_tid_t tid;
Objecter *objecter;
public:
- C_CancelOp(ceph_tid_t t, Objecter *objecter) : tid(t), objecter(objecter) {}
+ C_CancelOp(Objecter *objecter) : objecter(objecter) {}
void finish(int r) {
objecter->op_cancel(tid, -ETIMEDOUT);
}
+ void set_tid(ceph_tid_t _tid) {
+ tid = _tid;
+ }
};
ceph_tid_t Objecter::op_submit(Op *op, int *ctx_budget)
}
}
+ C_CancelOp *cb = NULL;
+ if (osd_timeout > 0) {
+ cb = new C_CancelOp(this);
+ op->ontimeout = cb;
+ }
+
ceph_tid_t tid = _op_submit(op, lc);
- if (osd_timeout > 0) {
+ if (cb) {
+ cb->set_tid(tid);
Mutex::Locker l(timer_lock);
- op->ontimeout = new C_CancelOp(tid, this);
timer.add_event_after(osd_timeout, op->ontimeout);
}