From e552ba7c2dc86cd344bd728ffec147ef483d2843 Mon Sep 17 00:00:00 2001 From: seelabs Date: Thu, 5 May 2016 11:13:54 -0400 Subject: [PATCH] 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. --- include/beast/websocket/impl/close_op.ipp | 2 +- include/beast/websocket/impl/read_frame_op.ipp | 2 +- include/beast/websocket/impl/write_frame_op.ipp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/include/beast/websocket/impl/close_op.ipp b/include/beast/websocket/impl/close_op.ipp index 98da94d2..9b59413f 100644 --- a/include/beast/websocket/impl/close_op.ipp +++ b/include/beast/websocket/impl/close_op.ipp @@ -175,8 +175,8 @@ stream::close_op::operator()( d.ws.error_ = true; if(d.ws.wr_block_ == &d) d.ws.wr_block_ = nullptr; - d.h(ec); d.ws.rd_op_.maybe_invoke(); + d.h(ec); } } // websocket diff --git a/include/beast/websocket/impl/read_frame_op.ipp b/include/beast/websocket/impl/read_frame_op.ipp index 8b70039c..46613690 100644 --- a/include/beast/websocket/impl/read_frame_op.ipp +++ b/include/beast/websocket/impl/read_frame_op.ipp @@ -497,8 +497,8 @@ operator()(error_code ec,std::size_t bytes_transferred, bool again) d.ws.error_ = true; if(d.ws.wr_block_ == &d) d.ws.wr_block_ = nullptr; - d.h(ec); d.ws.wr_op_.maybe_invoke(); + d.h(ec); } } // websocket diff --git a/include/beast/websocket/impl/write_frame_op.ipp b/include/beast/websocket/impl/write_frame_op.ipp index fa82b2b5..4ca67056 100644 --- a/include/beast/websocket/impl/write_frame_op.ipp +++ b/include/beast/websocket/impl/write_frame_op.ipp @@ -256,8 +256,8 @@ operator()( deallocate(d.tmp, d.tmp_size, d.h); d.tmp = nullptr; } - d.h(ec); d.ws.rd_op_.maybe_invoke(); + d.h(ec); } } // websocket