diff --git a/SourceS/miniwin/misc.h b/SourceS/miniwin/misc.h index f3a453c22..dc92cc7ac 100644 --- a/SourceS/miniwin/misc.h +++ b/SourceS/miniwin/misc.h @@ -187,6 +187,7 @@ WINBOOL WINAPI CloseHandle(HANDLE hObject); HANDLE WINAPI CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualReset, WINBOOL bInitialState, LPCSTR lpName); +BOOL CloseEvent(HANDLE event); BOOL WINAPI SetEvent(HANDLE hEvent); BOOL WINAPI ResetEvent(HANDLE hEvent); int WINAPI WaitForSingleObject(HANDLE hHandle, DWORD dwMilliseconds); diff --git a/SourceX/miniwin/misc_io.cpp b/SourceX/miniwin/misc_io.cpp index d03239eb0..75fe86ac5 100644 --- a/SourceX/miniwin/misc_io.cpp +++ b/SourceX/miniwin/misc_io.cpp @@ -127,7 +127,7 @@ WINBOOL CloseHandle(HANDLE hObject) { memfile *file = static_cast(hObject); if (files.find(file) == files.end()) - return true; + return CloseEvent(hObject); std::unique_ptr ufile(file); // ensure that delete file is // called on returning files.erase(file); diff --git a/SourceX/miniwin/thread.cpp b/SourceX/miniwin/thread.cpp index 53c74b0ad..434ce5956 100644 --- a/SourceX/miniwin/thread.cpp +++ b/SourceX/miniwin/thread.cpp @@ -129,6 +129,18 @@ HANDLE CreateEventA(LPSECURITY_ATTRIBUTES lpEventAttributes, WINBOOL bManualRese return ret; } +BOOL CloseEvent(HANDLE hObject) +{ + struct event_emul *event = static_cast(hObject); + if (events.find((uintptr_t)event) == events.end()) + return false; + SDL_DestroyCond(event->cond); + SDL_DestroyMutex(event->mutex); + events.erase((uintptr_t)event); + free(event); + return true; +} + BOOL SetEvent(HANDLE hEvent) { struct event_emul *e = (struct event_emul *)hEvent;