// caller checks;
assert(tracking_enabled);
- i->request->clear_data();
- i->request->clear_payload();
-
Mutex::Locker locker(ops_in_flight_lock);
assert(i->xitem.get_list() == &ops_in_flight);
utime_t now = ceph_clock_now(cct);
}
void OpTracker::RemoveOnDelete::operator()(TrackedOp *op) {
+ op->mark_event("done");
+ op->_unregistered();
if (!tracker->tracking_enabled) {
- op->request->clear_data();
delete op;
return;
}
- op->mark_event("done");
tracker->unregister_inflight_op(op);
// Do not delete op, unregister_inflight_op took control
}
virtual void _event_marked() {}
/// return a unique descriptor of the Op; eg the message it's attached to
virtual void _dump_op_descriptor(ostream& stream) const = 0;
+ /// called when the last non-OpTracker reference is dropped
+ virtual void _unregistered() {};
public:
virtual ~TrackedOp() { assert(request); request->put(); }
get_req()->print(stream);
}
+void OpRequest::_unregistered() {
+ request->clear_data();
+ request->clear_payload();
+}
+
bool OpRequest::check_rmw(int flag) {
return rmw_flags & flag;
}