From bcc059e6d72776a79441e6a36b4912d9c3c2b5fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Wed, 22 Feb 2017 17:35:26 +0100 Subject: [PATCH] Fix bogus outOfWaiters event loop exit reason for active event waits. --- source/eventcore/drivers/winapi/events.d | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/eventcore/drivers/winapi/events.d b/source/eventcore/drivers/winapi/events.d index 2b0db73..4500e29 100644 --- a/source/eventcore/drivers/winapi/events.d +++ b/source/eventcore/drivers/winapi/events.d @@ -57,11 +57,15 @@ final class WinAPIEventDriverEvents : EventDriverEvents { auto pe = event in m_events; assert(pe !is null, "Invalid event ID passed to triggerEvent."); if (notify_all) { - foreach (w; pe.waiters.consume) + foreach (w; pe.waiters.consume) { + m_core.removeWaiter(); w(event); + } } else { - if (!pe.waiters.empty) + if (!pe.waiters.empty) { + m_core.removeWaiter(); pe.waiters.consumeOne()(event); + } } } @@ -82,6 +86,7 @@ final class WinAPIEventDriverEvents : EventDriverEvents { override void wait(EventID event, EventCallback on_event) { + m_core.addWaiter(); return m_events[event].waiters.put(on_event); } @@ -91,6 +96,7 @@ final class WinAPIEventDriverEvents : EventDriverEvents { import std.algorithm.mutation : remove; m_events[event].waiters.removePending(on_event); + m_core.removeWaiter(); } override void addRef(EventID descriptor)