}
void complete(int r) override {
- // invoked by C_notify_Finish (or C_aio_notify_Ack on failure)
+ // invoked by C_notify_Finish
lock.Lock();
finished = true;
complete_unlock(r);
ldout(cct, 10) << __func__ << " linger op " << oncomplete->linger_op << " "
<< "acked (" << r << ")" << dendl;
oncomplete->handle_ack(r);
- if (r < 0) {
- // on failure, we won't expect to see a notify_finish callback
- onfinish->complete(r);
- }
}
};
Context *notify_finish = new C_notify_Finish(client->cct, ¬ify_finish_cond,
objecter, linger_op, preply_bl,
preply_buf, preply_buf_len);
+ (void) notify_finish;
uint32_t timeout = notify_timeout;
if (timeout_ms)
} else {
ldout(client->cct, 10) << __func__ << " failed to initiate notify, r = "
<< r << dendl;
- notify_finish->complete(r);
}
objecter->linger_cancel(linger_op);
info->on_reg_commit->complete(r);
info->on_reg_commit = NULL;
}
+ if (r < 0 && info->on_notify_finish) {
+ info->on_notify_finish->complete(r);
+ info->on_notify_finish = nullptr;
+ }
// only tell the user the first time we do this
info->registered = true;
op->on_reg_commit->complete(-ENOENT);
op->on_reg_commit = nullptr;
}
+ if (op->on_notify_finish) {
+ op->on_notify_finish->complete(-ENOENT);
+ op->on_notify_finish = nullptr;
+ }
*need_unregister = true;
}
} else {