From aa9a08f571d64c3569a1fd65013d8c5a05a32176 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B6nke=20Ludwig?= Date: Thu, 23 Nov 2017 17:18:33 +0100 Subject: [PATCH] Explicitly dispose the event driver on thread shutdown. Handle multiple calls to dispose() gracefully, because external code may already make an explicit call to dispose(). --- source/eventcore/core.d | 5 +++++ source/eventcore/drivers/posix/driver.d | 2 ++ source/eventcore/drivers/winapi/driver.d | 2 ++ 3 files changed, 9 insertions(+) diff --git a/source/eventcore/core.d b/source/eventcore/core.d index 91179cc..547d515 100644 --- a/source/eventcore/core.d +++ b/source/eventcore/core.d @@ -30,6 +30,11 @@ static if (!is(NativeEventDriver == EventDriver)) { if (!s_driver) s_driver = new NativeEventDriver; } + static ~this() + { + s_driver.dispose(); + } + shared static this() { s_driver = new NativeEventDriver; diff --git a/source/eventcore/drivers/posix/driver.d b/source/eventcore/drivers/posix/driver.d index 2e8f58f..15e9e95 100644 --- a/source/eventcore/drivers/posix/driver.d +++ b/source/eventcore/drivers/posix/driver.d @@ -89,9 +89,11 @@ final class PosixEventDriver(Loop : PosixEventLoop) : EventDriver { final override void dispose() { + if (!m_loop) return; m_files.dispose(); m_dns.dispose(); m_loop.dispose(); + m_loop = null; } } diff --git a/source/eventcore/drivers/winapi/driver.d b/source/eventcore/drivers/winapi/driver.d index a439525..91d0992 100644 --- a/source/eventcore/drivers/winapi/driver.d +++ b/source/eventcore/drivers/winapi/driver.d @@ -72,7 +72,9 @@ final class WinAPIEventDriver : EventDriver { override void dispose() { + if (!m_events) return; m_events.dispose(); + m_events = null; assert(threadInstance !is null); threadInstance = null; }