From f85f9ea75a316a7bccf149dafa7b9235a95aec32 Mon Sep 17 00:00:00 2001 From: sebres Date: Thu, 25 Sep 2025 13:42:14 +0000 Subject: windows: amend to [893f8cc5db] - fixed alloc mutex, avoids heap corruption and SF (tcl-mutex is not simple critical section anymore) --- win/tclWinThrd.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/win/tclWinThrd.c b/win/tclWinThrd.c index 28c0227..65cb71d 100644 --- a/win/tclWinThrd.c +++ b/win/tclWinThrd.c @@ -128,7 +128,7 @@ static DWORD tlsKey; typedef struct { Tcl_Mutex tlock; - CRITICAL_SECTION wlock; + WMutex wm; } allocMutex; #endif /* USE_THREAD_ALLOC */ @@ -1005,11 +1005,11 @@ TclpNewAllocMutex(void) allocMutex *lockPtr; lockPtr = (allocMutex *)malloc(sizeof(allocMutex)); + lockPtr->tlock = (Tcl_Mutex)&lockPtr->wm; if (lockPtr == NULL) { Tcl_Panic("could not allocate lock"); } - lockPtr->tlock = (Tcl_Mutex) &lockPtr->wlock; - InitializeCriticalSection(&lockPtr->wlock); + WMutexInit(&lockPtr->wm); return &lockPtr->tlock; } @@ -1019,10 +1019,11 @@ TclpFreeAllocMutex( { allocMutex *lockPtr = (allocMutex *) mutex; - if (!lockPtr) { + if (!lockPtr || !lockPtr->tlock) { return; } - DeleteCriticalSection(&lockPtr->wlock); + lockPtr->tlock = NULL; + WMutexDestroy(&lockPtr->wm); free(lockPtr); } -- cgit v0.12