diff options
author | Tamar Christina <tamar@zhox.com> | 2021-12-28 15:06:16 +0000 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2022-01-15 03:41:55 -0500 |
commit | 0dc723957d0fdb5909f145405b775efea0fe2f6e (patch) | |
tree | f6ee9f0a8ec293c4d6b60e6d6cb8cdb7b67ec082 /rts/win32 | |
parent | e2b60be8472ad5b7b6ef2b265b4a06d1b2b67c7d (diff) | |
download | haskell-0dc723957d0fdb5909f145405b775efea0fe2f6e.tar.gz |
winio: fix heap corruption and various leaks.
Diffstat (limited to 'rts/win32')
-rw-r--r-- | rts/win32/AsyncWinIO.c | 3 | ||||
-rw-r--r-- | rts/win32/ConsoleHandler.c | 2 | ||||
-rw-r--r-- | rts/win32/ConsoleHandler.h | 7 | ||||
-rw-r--r-- | rts/win32/ThrIOManager.c | 10 | ||||
-rw-r--r-- | rts/win32/ThrIOManager.h | 2 |
5 files changed, 21 insertions, 3 deletions
diff --git a/rts/win32/AsyncWinIO.c b/rts/win32/AsyncWinIO.c index 7fb71e92e7..5f61f815f3 100644 --- a/rts/win32/AsyncWinIO.c +++ b/rts/win32/AsyncWinIO.c @@ -147,7 +147,7 @@ There we initialize IO manager locale variables and. * call ioManagerStart() - * Creat a thread to execute "runner" + * Create a thread to execute "runner" We never truly shut down the IO Manager. While this means we might block forever on the IOPort if the IO Manager is no longer @@ -274,6 +274,7 @@ void shutdownAsyncWinIO(bool wait_threads) WaitForSingleObject (workerThread, INFINITE); } completionPortHandle = INVALID_HANDLE_VALUE; + CloseHandle (workerThread); workerThread = NULL; workerThreadId = 0; free (entries); diff --git a/rts/win32/ConsoleHandler.c b/rts/win32/ConsoleHandler.c index 05d15868eb..4af897bc54 100644 --- a/rts/win32/ConsoleHandler.c +++ b/rts/win32/ConsoleHandler.c @@ -57,7 +57,7 @@ freeSignalHandlers(void) { /* Do nothing */ } -/* Seems to be a bit of an orphan...where used? */ +/* Called in hs_exit to clean up resources. */ void finiUserSignals(void) { diff --git a/rts/win32/ConsoleHandler.h b/rts/win32/ConsoleHandler.h index bb7278abba..d22f10f16a 100644 --- a/rts/win32/ConsoleHandler.h +++ b/rts/win32/ConsoleHandler.h @@ -62,3 +62,10 @@ extern void startSignalHandlers(Capability *cap); extern int rts_waitConsoleHandlerCompletion(void); #endif /* THREADED_RTS */ + +/* + * Function: finiUserSignals() + * + * Tear down and shut down user signal processing. + */ +extern void finiUserSignals(void); diff --git a/rts/win32/ThrIOManager.c b/rts/win32/ThrIOManager.c index d614d49a0c..6bbf65a45f 100644 --- a/rts/win32/ThrIOManager.c +++ b/rts/win32/ThrIOManager.c @@ -161,3 +161,13 @@ ioManagerStart (void) rts_unlock(cap); } } + +/* + * Called to close the io_manager_event handle when the IO manager thread is + * terminating. + */ +void +ioManagerFinished(void) +{ + CloseHandle(io_manager_event); +} diff --git a/rts/win32/ThrIOManager.h b/rts/win32/ThrIOManager.h index a67bdde364..c7ecc76e9f 100644 --- a/rts/win32/ThrIOManager.h +++ b/rts/win32/ThrIOManager.h @@ -15,4 +15,4 @@ void ioManagerWakeup (void); void ioManagerDie (void); void ioManagerStart (void); - +void ioManagerFinished (void); |