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; }