Fix examples to dispatch to strand

fix #1852
This commit is contained in:
Richard Hodges
2020-03-12 15:28:53 +01:00
parent 929b15f844
commit a21c1b7298
3 changed files with 36 additions and 2 deletions

View File

@ -3,6 +3,7 @@ Version XXX:
* Remove CODE_OF_CONDUCT.md
* Refactor websocket read
* Correct buffer_bytes documentation
* Fix examples to dispatch to strand
--------------------------------------------------------------------------------

View File

@ -21,6 +21,7 @@
#include <boost/beast/websocket.hpp>
#include <boost/beast/version.hpp>
#include <boost/asio/bind_executor.hpp>
#include <boost/asio/dispatch.hpp>
#include <boost/asio/signal_set.hpp>
#include <boost/asio/steady_timer.hpp>
#include <boost/asio/strand.hpp>
@ -817,6 +818,20 @@ public:
// Launch the detector
void
run()
{
// We need to be executing within a strand to perform async operations
// on the I/O objects in this session. Although not strictly necessary
// for single-threaded contexts, this example code is written to be
// thread-safe by default.
net::dispatch(
stream_.get_executor(),
beast::bind_front_handler(
&detect_session::on_run,
this->shared_from_this()));
}
void
on_run()
{
// Set the timeout.
stream_.expires_after(std::chrono::seconds(30));

View File

@ -18,6 +18,7 @@
#include <boost/beast/websocket.hpp>
#include <boost/beast/version.hpp>
#include <boost/asio/bind_executor.hpp>
#include <boost/asio/dispatch.hpp>
#include <boost/asio/signal_set.hpp>
#include <boost/asio/strand.hpp>
#include <boost/make_unique.hpp>
@ -439,9 +440,18 @@ public:
void
run()
{
do_read();
// We need to be executing within a strand to perform async operations
// on the I/O objects in this session. Although not strictly necessary
// for single-threaded contexts, this example code is written to be
// thread-safe by default.
net::dispatch(
stream_.get_executor(),
beast::bind_front_handler(
&http_session::do_read,
this->shared_from_this()));
}
private:
void
do_read()
@ -588,7 +598,15 @@ public:
void
run()
{
do_accept();
// We need to be executing within a strand to perform async operations
// on the I/O objects in this session. Although not strictly necessary
// for single-threaded contexts, this example code is written to be
// thread-safe by default.
net::dispatch(
acceptor_.get_executor(),
beast::bind_front_handler(
&listener::do_accept,
this->shared_from_this()));
}
private: