diff --git a/Makefile b/Makefile index 828a4ff..25f2416 100644 --- a/Makefile +++ b/Makefile @@ -31,7 +31,7 @@ SRC_FILES := changes.txt license.txt Makefile mkstubs.pl readme.txt src/config.h all: ipxwrapper.dll wsock32.dll mswsock.dll ipxconfig.exe dpwsockx.dll clean: - rm -f ipxwrapper.dll wsock32.dll mswsock.dll ipxconfig.exe + rm -f ipxwrapper.dll wsock32.dll mswsock.dll ipxconfig.exe dpwsockx.dll rm -f src/*.o src/*_stubs.s dist: all diff --git a/src/directplay.c b/src/directplay.c index 55d4933..d33ae9a 100644 --- a/src/directplay.c +++ b/src/directplay.c @@ -413,6 +413,7 @@ static HRESULT WINAPI IPX_ShutdownEx(LPDPSP_SHUTDOWNDATA data) { TerminateThread(sp_data->worker_thread, 0); } + CloseHandle(sp_data->worker_thread); sp_data->worker_thread = NULL; } diff --git a/src/ipxwrapper.c b/src/ipxwrapper.c index 77dd93d..2c7fa9d 100644 --- a/src/ipxwrapper.c +++ b/src/ipxwrapper.c @@ -114,7 +114,12 @@ BOOL WINAPI DllMain(HINSTANCE me, DWORD why, LPVOID res) { LeaveCriticalSection(&(router->crit_sec)); - WaitForSingleObject(router_thread, INFINITE); + if(WaitForSingleObject(router_thread, 3000) == WAIT_TIMEOUT) { + log_printf("Router thread didn't exit in 3 seconds, killing"); + TerminateThread(router_thread, 0); + } + + CloseHandle(router_thread); router_thread = NULL; router_destroy(router);