aboutsummaryrefslogtreecommitdiff
path: root/devel/boost-libs/files/patch-beast-255
blob: 279410af32d168d90456b73cac5bae954e0f60d4 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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};