mirror of
https://git.freebsd.org/ports.git
synced 2025-06-06 13:20:32 -04:00
Fix moved-from executor in idle ping timeout: https://www.boost.org/patches/1_70_0/0001-beast-fix-moved-from-executor.patch
89 lines
3 KiB
Text
89 lines
3 KiB
Text
https://github.com/boostorg/beast/issues/1599
|
|
https://github.com/boostorg/beast/pull/1601
|
|
|
|
--- boost/beast/websocket/impl/ping.hpp.orig 2019-04-09 19:35:22 UTC
|
|
+++ boost/beast/websocket/impl/ping.hpp
|
|
@@ -176,7 +176,8 @@ class stream<NextLayer, deflateSupported>::idle_ping_o
|
|
impl.op_idle_ping.emplace(std::move(*this));
|
|
impl.wr_block.lock(this);
|
|
BOOST_ASIO_CORO_YIELD
|
|
- net::post(this->get(), std::move(*this));
|
|
+ net::post(
|
|
+ this->get_executor(), std::move(*this));
|
|
BOOST_ASSERT(impl.wr_block.is_locked(this));
|
|
}
|
|
if(impl.check_stop_now(ec))
|
|
--- libs/beast/CHANGELOG.md.orig 2019-04-09 19:35:22 UTC
|
|
+++ libs/beast/CHANGELOG.md
|
|
@@ -1,3 +1,10 @@
|
|
+Version 248-hf1:
|
|
+
|
|
+* Add idle ping suspend test
|
|
+* Fix moved-from executor in idle ping timeout
|
|
+
|
|
+--------------------------------------------------------------------------------
|
|
+
|
|
Version 248:
|
|
|
|
* Don't use a moved-from handler
|
|
--- libs/beast/test/beast/websocket/ping.cpp.orig 2019-04-09 19:35:22 UTC
|
|
+++ libs/beast/test/beast/websocket/ping.cpp
|
|
@@ -10,8 +10,11 @@
|
|
// Test that header file is self-contained.
|
|
#include <boost/beast/websocket/stream.hpp>
|
|
|
|
+#include <boost/beast/_experimental/test/tcp.hpp>
|
|
+
|
|
#include "test.hpp"
|
|
|
|
+#include <boost/asio/ip/tcp.hpp>
|
|
#include <boost/asio/io_context.hpp>
|
|
#include <boost/asio/strand.hpp>
|
|
|
|
@@ -365,6 +368,46 @@ class ping_test : public websocket_test_suite (public)
|
|
ioc.run();
|
|
BEAST_EXPECT(count == 3);
|
|
});
|
|
+
|
|
+ // suspend idle ping
|
|
+ {
|
|
+ using socket_type =
|
|
+ net::basic_stream_socket<
|
|
+ net::ip::tcp,
|
|
+ net::executor>;
|
|
+ net::io_context ioc;
|
|
+ stream<socket_type> ws1(ioc);
|
|
+ stream<socket_type> ws2(ioc);
|
|
+ ws1.set_option(stream_base::timeout{
|
|
+ stream_base::none(),
|
|
+ std::chrono::seconds(0),
|
|
+ true});
|
|
+ test::connect(
|
|
+ ws1.next_layer(),
|
|
+ ws2.next_layer());
|
|
+ ws1.async_handshake("localhost", "/",
|
|
+ [](error_code){});
|
|
+ ws2.async_accept([](error_code){});
|
|
+ ioc.run();
|
|
+ ioc.restart();
|
|
+ flat_buffer b1;
|
|
+ auto mb = b1.prepare(65536);
|
|
+ std::memset(mb.data(), 0, mb.size());
|
|
+ b1.commit(65536);
|
|
+ ws1.async_write(b1.data(),
|
|
+ [&](error_code, std::size_t){});
|
|
+ BEAST_EXPECT(
|
|
+ ws1.impl_->wr_block.is_locked());
|
|
+ ws1.async_read_some(net::mutable_buffer{},
|
|
+ [&](error_code, std::size_t){});
|
|
+ ioc.run();
|
|
+ ioc.restart();
|
|
+ flat_buffer b2;
|
|
+ ws2.async_read(b2,
|
|
+ [&](error_code, std::size_t){});
|
|
+ ioc.run();
|
|
+ }
|
|
+ //);
|
|
|
|
{
|
|
echo_server es{log, kind::async};
|