Use the executor type in basic_stream timer

fix #1589
This commit is contained in:
Vinnie Falco
2019-10-15 15:47:15 -07:00
parent bafce23853
commit 087bcc4ef5
2 changed files with 48 additions and 1 deletions

View File

@@ -237,7 +237,15 @@ private:
op_state read;
op_state write;
net::steady_timer timer; // rate timer
#if 0
net::basic_waitable_timer<
std::chrono::steady_clock,
net::wait_traits<
std::chrono::steady_clock>,
Executor> timer; // rate timer;
#else
net::steady_timer timer;
#endif
int waiting = 0;
impl_type(impl_type&&) = default;

View File

@@ -1259,6 +1259,44 @@ public:
//--------------------------------------------------------------------------
void
testIssue1589()
{
net::io_context ioc;
// the timer needlessly used polymorphic executor
basic_stream<
net::ip::tcp,
net::io_context::executor_type>{ioc};
// make sure strands work
basic_stream<
net::ip::tcp,
net::strand<
net::io_context::executor_type>>{
net::make_strand(ioc)};
// address the problem in the issue
{
net::basic_stream_socket<
net::ip::tcp,
net::strand<
net::io_context::executor_type>
> sock(net::make_strand(ioc));
basic_stream<
net::ip::tcp,
net::strand<
net::io_context::executor_type>,
unlimited_rate_policy> stream(std::move(sock));
BOOST_STATIC_ASSERT(
std::is_convertible<
decltype(sock)::executor_type,
decltype(stream)::executor_type>::value);
}
}
//--------------------------------------------------------------------------
void
run()
{
@@ -1268,6 +1306,7 @@ public:
testConnect();
testMembers();
testJavadocs();
testIssue1589();
}
};