From 924f2087f2f4c0fd7785100cf0ccf433a01a850d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Sun, 22 Jan 2017 02:30:00 +0100 Subject: [PATCH] Fix premature event loop exit in case of waiting for events in the Posix driver. --- source/eventcore/drivers/posix.d | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/source/eventcore/drivers/posix.d b/source/eventcore/drivers/posix.d index fba1f09..f844265 100644 --- a/source/eventcore/drivers/posix.d +++ b/source/eventcore/drivers/posix.d @@ -143,7 +143,9 @@ final class PosixEventDriverCore(Loop : PosixEventLoop, Timers : EventDriverTime return ExitReason.exited; } - if (!waiterCount) return ExitReason.outOfWaiters; + if (!waiterCount) { + return ExitReason.outOfWaiters; + } bool got_events; @@ -167,7 +169,9 @@ final class PosixEventDriverCore(Loop : PosixEventLoop, Timers : EventDriverTime m_exit = false; return ExitReason.exited; } - if (!waiterCount) return ExitReason.outOfWaiters; + if (!waiterCount) { + return ExitReason.outOfWaiters; + } if (got_events) return ExitReason.idle; return ExitReason.timeout; } @@ -1190,6 +1194,7 @@ final class PosixEventDriverEvents(Loop : PosixEventLoop) : EventDriverEvents { final override void wait(EventID event, EventCallback on_event) { + m_loop.m_waiterCount++; return getSlot(event).waiters.put(on_event); } @@ -1198,6 +1203,7 @@ final class PosixEventDriverEvents(Loop : PosixEventLoop) : EventDriverEvents { import std.algorithm.searching : countUntil; import std.algorithm.mutation : remove; + m_loop.m_waiterCount--; getSlot(event).waiters.removePending(on_event); }