[Python-Dev] Bugs in thread_nt.h

Sturla Molden sturla at molden.no
Thu Mar 10 02:25:08 CET 2011


Atomic operations (InterlockedCompareExchange, et al.) are used on the 
field 'owned' in NRMUTEX. These methods require the memory to be aligned 
on 32-byte boundaries. They also require the volatile qualifer. Three 
small changes are therefore needed (see below).
Regards,
Sturla Molden
typedef struct NRMUTEX {
 volatile LONG owned ; /* Bugfix: remember volatile */
 DWORD thread_id ;
 HANDLE hevent ;
} NRMUTEX, *PNRMUTEX;
NRMUTEX
AllocNonRecursiveMutex(void)
{
 PNRMUTEX mutex = (PNRMUTEX)_aligned_malloc(sizeof(NRMUTEX),32) ; /* 
Bugfix: align to 32-bytes */
 if (mutex && !InitializeNonRecursiveMutex(mutex))
 {
 free(mutex) ;
 mutex = NULL ;
 }
 return mutex ;
}
void
FreeNonRecursiveMutex(PNRMUTEX mutex)
{
 if (mutex)
 {
 DeleteNonRecursiveMutex(mutex) ;
 _aligned_free(mutex) ; /* Bugfix: align to 32-bytes */
 }
}


More information about the Python-Dev mailing list

AltStyle によって変換されたページ (->オリジナル) /