summaryrefslogtreecommitdiff
path: root/boost/beast/websocket/impl/accept.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/websocket/impl/accept.ipp')
-rw-r--r--boost/beast/websocket/impl/accept.ipp18
1 files changed, 16 insertions, 2 deletions
diff --git a/boost/beast/websocket/impl/accept.ipp b/boost/beast/websocket/impl/accept.ipp
index 9daf7b311b..c93e933b18 100644
--- a/boost/beast/websocket/impl/accept.ipp
+++ b/boost/beast/websocket/impl/accept.ipp
@@ -22,6 +22,7 @@
#include <boost/asio/coroutine.hpp>
#include <boost/asio/associated_allocator.hpp>
#include <boost/asio/associated_executor.hpp>
+#include <boost/asio/executor_work_guard.hpp>
#include <boost/asio/handler_continuation_hook.hpp>
#include <boost/asio/handler_invoke_hook.hpp>
#include <boost/asio/post.hpp>
@@ -43,6 +44,8 @@ class stream<NextLayer, deflateSupported>::response_op
struct data
{
stream<NextLayer, deflateSupported>& ws;
+ boost::asio::executor_work_guard<decltype(std::declval<
+ stream<NextLayer, deflateSupported>&>().get_executor())> wg;
error_code result;
response_type res;
@@ -54,6 +57,7 @@ class stream<NextLayer, deflateSupported>::response_op
http::basic_fields<Allocator>> const& req,
Decorator const& decorator)
: ws(ws_)
+ , wg(ws.get_executor())
, res(ws_.build_response(req, decorator, result))
{
}
@@ -137,7 +141,10 @@ operator()(
d.ws.do_pmd_config(d.res, is_deflate_supported{});
d.ws.open(role_type::server);
}
- d_.invoke(ec);
+ {
+ auto wg = std::move(d.wg);
+ d_.invoke(ec);
+ }
}
}
@@ -153,6 +160,8 @@ class stream<NextLayer, deflateSupported>::accept_op
struct data
{
stream<NextLayer, deflateSupported>& ws;
+ boost::asio::executor_work_guard<decltype(std::declval<
+ stream<NextLayer, deflateSupported>&>().get_executor())> wg;
Decorator decorator;
http::request_parser<http::empty_body> p;
data(
@@ -160,6 +169,7 @@ class stream<NextLayer, deflateSupported>::accept_op
stream<NextLayer, deflateSupported>& ws_,
Decorator const& decorator_)
: ws(ws_)
+ , wg(ws.get_executor())
, decorator(decorator_)
{
}
@@ -284,6 +294,7 @@ operator()(error_code ec, std::size_t)
auto& ws = d.ws;
auto const req = d.p.release();
auto const decorator = d.decorator;
+ auto wg = std::move(d.wg);
#if 1
return response_op<Handler>{
d_.release_handler(),
@@ -297,7 +308,10 @@ operator()(error_code ec, std::size_t)
#endif
}
}
- d_.invoke(ec);
+ {
+ auto wg = std::move(d.wg);
+ d_.invoke(ec);
+ }
}
}