]> granicus.if.org Git - icinga2/commitdiff
/v1/events: don't deadlock other coroutines 7076/head
authorAlexander A. Klimov <alexander.klimov@icinga.com>
Fri, 5 Apr 2019 07:22:42 +0000 (09:22 +0200)
committerAlexander A. Klimov <alexander.klimov@icinga.com>
Fri, 5 Apr 2019 07:22:42 +0000 (09:22 +0200)
lib/remote/eventshandler.cpp

index 4bc0285149ee0f39ac47c653c2b02b38e5d1c04b..98e8153543ae299043a8110d758188a06f0b00ec 100644 (file)
@@ -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);
                }
        }
 }