Fix invokable order of invocation:

The call to the final handler in a composed operation MUST be
the last thing performed, as the handler may cause the end of
object lifetimes before it returns.
This commit is contained in:
seelabs
2016-05-05 11:13:54 -04:00
committed by Vinnie Falco
parent 4104eca1f1
commit e552ba7c2d
3 changed files with 3 additions and 3 deletions

View File

@@ -175,8 +175,8 @@ stream<NextLayer>::close_op<Handler>::operator()(
d.ws.error_ = true; d.ws.error_ = true;
if(d.ws.wr_block_ == &d) if(d.ws.wr_block_ == &d)
d.ws.wr_block_ = nullptr; d.ws.wr_block_ = nullptr;
d.h(ec);
d.ws.rd_op_.maybe_invoke(); d.ws.rd_op_.maybe_invoke();
d.h(ec);
} }
} // websocket } // websocket

View File

@@ -497,8 +497,8 @@ operator()(error_code ec,std::size_t bytes_transferred, bool again)
d.ws.error_ = true; d.ws.error_ = true;
if(d.ws.wr_block_ == &d) if(d.ws.wr_block_ == &d)
d.ws.wr_block_ = nullptr; d.ws.wr_block_ = nullptr;
d.h(ec);
d.ws.wr_op_.maybe_invoke(); d.ws.wr_op_.maybe_invoke();
d.h(ec);
} }
} // websocket } // websocket

View File

@@ -256,8 +256,8 @@ operator()(
deallocate(d.tmp, d.tmp_size, d.h); deallocate(d.tmp, d.tmp_size, d.h);
d.tmp = nullptr; d.tmp = nullptr;
} }
d.h(ec);
d.ws.rd_op_.maybe_invoke(); d.ws.rd_op_.maybe_invoke();
d.h(ec);
} }
} // websocket } // websocket