Operation::cancel() return true if cancelled
This commit is contained in:
+8
-4
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user