diff options
Diffstat (limited to 'src/mir_core/threads.cpp')
-rw-r--r-- | src/mir_core/threads.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/mir_core/threads.cpp b/src/mir_core/threads.cpp index 90dcdaaf5d..cf1cdad48c 100644 --- a/src/mir_core/threads.cpp +++ b/src/mir_core/threads.cpp @@ -103,6 +103,9 @@ struct FORK_ARG { void __cdecl forkthread_r(void * arg)
{
+ MThreadData threadData = { CreateEvent(NULL, FALSE, FALSE, NULL) };
+ TlsSetValue(mir_tls, &threadData);
+
struct FORK_ARG * fa = (struct FORK_ARG *) arg;
void (*callercode)(void*)=fa->threadcode;
void * cookie=fa->arg;
@@ -118,7 +121,7 @@ void __cdecl forkthread_r(void * arg) SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
Thread_Pop();
- return;
+ CloseHandle(threadData.m_hEvent);
}
MIR_CORE_DLL(UINT_PTR) forkthread( void (__cdecl *threadcode)(void*), unsigned long stacksize, void *arg)
@@ -141,6 +144,9 @@ MIR_CORE_DLL(UINT_PTR) forkthread( void (__cdecl *threadcode)(void*), unsigned l unsigned __stdcall forkthreadex_r(void * arg)
{
+ MThreadData threadData = { CreateEvent(NULL, FALSE, FALSE, NULL) };
+ TlsSetValue(mir_tls, &threadData);
+
struct FORK_ARG *fa = (struct FORK_ARG *)arg;
pThreadFuncEx threadcode = fa->threadcodeex;
pThreadFuncOwner threadcodeex = (pThreadFuncOwner)fa->threadcodeex;
@@ -163,6 +169,7 @@ unsigned __stdcall forkthreadex_r(void * arg) SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL);
Thread_Pop();
+ CloseHandle(threadData.m_hEvent);
return rc;
}
|