Fix data race in websocket examples

When using `websocket::stream`, the user has to take care to initiate
async operations within the associated strand.

Signed-off-by: Damian Jarek <damian.jarek93@gmail.com>
This commit is contained in:
Damian Jarek
2019-10-06 07:52:13 -07:00
committed by Vinnie Falco
parent 3817fb4c94
commit 0f5d1edcd8
4 changed files with 53 additions and 6 deletions
@@ -21,6 +21,7 @@
#include <boost/beast/websocket/ssl.hpp>
#include <boost/asio/coroutine.hpp>
#include <boost/asio/strand.hpp>
#include <boost/asio/dispatch.hpp>
#include <algorithm>
#include <cstdlib>
#include <functional>
@@ -65,7 +66,15 @@ public:
void
run()
{
loop({}, 0);
// 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(ws_.get_executor(),
beast::bind_front_handler(&session::loop,
shared_from_this(),
beast::error_code{},
0));
}
#include <boost/asio/yield.hpp>