mirror of https://github.com/Icinga/icinga2.git
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:
parent
d894792c36
commit
1c34610a78
|
@ -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 {
|
||||
|
|
Loading…
Reference in New Issue