Operation::cancel() return true if cancelled

This commit is contained in:
Michael Davidsaver
2020-07-28 09:21:07 -07:00
parent a16a9cc584
commit e52397fb63
4 changed files with 27 additions and 14 deletions
+8 -4
View File
@@ -162,19 +162,21 @@ struct GPROp : public OperationBase
}
}
virtual void cancel() override final
virtual bool cancel() override final
{
auto context = chan->context;
decltype (done) junk;
context->tcp_loop.call([this, &junk](){
_cancel(false);
bool ret;
context->tcp_loop.call([this, &junk, &ret](){
ret = _cancel(false);
junk = std::move(done);
// leave opByIOID for GC
});
return ret;
}
void _cancel(bool implicit) {
bool _cancel(bool implicit) {
if(implicit && state!=Done) {
log_warn_printf(setup, "implied cancel of op%x on channel '%s'\n",
op, chan ? chan->name.c_str() : "");
@@ -186,7 +188,9 @@ struct GPROp : public OperationBase
chan->conn->opByIOID.erase(ioid);
chan->opByIOID.erase(ioid);
}
bool ret = state!=Done;
state = Done;
return ret;
}
virtual void createOp() override final