From: Alexander A. Klimov Date: Fri, 5 Apr 2019 07:22:42 +0000 (+0200) Subject: /v1/events: don't deadlock other coroutines X-Git-Tag: v2.11.0-rc1~162^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2e4e2e1a79384a614bf1106860f4a6505e997adc;p=icinga2 /v1/events: don't deadlock other coroutines --- diff --git a/lib/remote/eventshandler.cpp b/lib/remote/eventshandler.cpp index 4bc028514..98e815354 100644 --- a/lib/remote/eventshandler.cpp +++ b/lib/remote/eventshandler.cpp @@ -101,6 +101,7 @@ bool EventsHandler::HandleRequest( } asio::const_buffer newLine ("\n", 1); + AsioConditionVariable dontLockOwnStrand (stream.get_io_service(), true); for (;;) { auto event (queue->WaitForEvent(&request, yc)); @@ -119,6 +120,8 @@ bool EventsHandler::HandleRequest( stream.async_flush(yc); } else if (server.Disconnected()) { return true; + } else { + dontLockOwnStrand.Wait(yc); } } }