[DSOUND] little patch

Robert Reif reif at earthlink.net
Sat Mar 12 08:23:37 CST 2005


Raphael wrote:

>>>-	This->lock.DebugInfo->Spare[1] = 0;
>>>+	/*This->lock.DebugInfo->Spare[1] = 0;*/
>>>	DeleteCriticalSection(&(This->lock));
>>>      
>>>
>>You have to zero this out or DeleteCriticalSection will try
>>to delete that static memory.
>>    
>>
>
>How ?
>At opposite it produce DebugInfo leaks
>as seen in RtlDeleteCriticalSection (dlls/ntdll/critsection.c line 197)
><snip>
>    if (crit->DebugInfo)
>    {
>        /* only free the ones we made in here */
>        if (!crit->DebugInfo->Spare[1])
>        {
>            RtlFreeHeap( GetProcessHeap(), 0, crit->DebugInfo );
>            crit->DebugInfo = NULL;
>        }
>    }
>
Actually it will leak DebugInfo if DebugInfo->Spare[1] is not 0.

><snip>
>i will provide a WINE_DEBUG_UNSET_CS_NAME for this problem
>
...

>>>+#define WINE_SET_CS_NAME(cs, name) (cs)->DebugInfo->Spare[1] = (DWORD)
>>>name +#define WINE_GET_CS_NAME(cs) (const char*)
>>>(cs)->lock.DebugInfo->Spare[1]
>>>      
>>>
>>This is a wine specific trick and should probably be put somewhere global
>>so all users can be consistent.  The name should have DEBUG in it
>>somewhere.
>>    
>>
>
>Yes, it should be better
>but i prefered to centralize it on dsound before moving it to wine/debug.h
>
>
>Regards,
>Raphael
>  
>
This is Alexandre's trick which I borrowed because it is very helpful in 
debugging lock problems.
It would be nice to formalize this and make it available in a more 
general way but that is Alexandre's call.




More information about the wine-devel mailing list