[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