JsonRpcConnection: Don't read any data on shutdown

When the `Desconnect()` method is called, clients are not disconnected
immediately. Instead, a new coroutine is spawned using the same strand
as the other coroutines. This coroutine calls `async_shutdown` on the
TCP socket, which might be blocking. However, in order not to block
indefintely, the `Timeout` class cancels all operations on the socket
after `10` seconds. Though, the timeout does not trigger the handler
immediately; it creates spawns another coroutine using the same strand
as in the `JsonRpcConnection` class. This can cause unexpected delays if
e.g. `HandleIncomingMessages` gets resumed before the coroutine from the
timeout class. Apart from that, the coroutine for writing messages uses
the same condition, making the two symmetrical.
This commit is contained in:
Yonas Habteab 2024-10-31 14:19:05 +01:00
parent d894792c36
commit 1c34610a78
1 changed files with 1 additions and 1 deletions

View File

@ -62,7 +62,7 @@ void JsonRpcConnection::HandleIncomingMessages(boost::asio::yield_context yc)
{
m_Stream->next_layer().SetSeen(&m_Seen);
for (;;) {
while (!m_ShuttingDown) {
String message;
try {