[DSOUND] little patch
Robert Reif
reif at earthlink.net
Sat Mar 12 09:29:37 CST 2005
>
>
>>>> +#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.
>
Something like this plus a lot of documentation explaining what is going on.
I think this should go in debug.h but there is only trace stuff in there
so I put it in library.h.
Compile tested only.
-------------- next part --------------
Index: dlls/dsound/buffer.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/buffer.c,v
retrieving revision 1.47
diff -u -p -r1.47 buffer.c
--- dlls/dsound/buffer.c 16 Feb 2005 16:09:03 -0000 1.47
+++ dlls/dsound/buffer.c 12 Mar 2005 15:20:33 -0000
@@ -32,6 +32,7 @@
#include "dsound.h"
#include "dsdriver.h"
#include "dsound_private.h"
+#include "wine/library.h"
WINE_DEFAULT_DEBUG_CHANNEL(dsound);
@@ -365,7 +366,7 @@ static ULONG WINAPI IDirectSoundBufferIm
if (!ref) {
DSOUND_RemoveBuffer(This->dsound, This);
- This->lock.DebugInfo->Spare[1] = 0;
+ wine_dbg_remove_lock_name(&(This->lock));
DeleteCriticalSection(&(This->lock));
if (This->hwbuf) {
@@ -1176,7 +1177,7 @@ HRESULT WINAPI IDirectSoundBufferImpl_Cr
DSOUND_RecalcVolPan(&(dsb->volpan));
InitializeCriticalSection(&(dsb->lock));
- dsb->lock.DebugInfo->Spare[1] = (DWORD)"DSOUNDBUFFER_lock";
+ wine_dbg_add_lock_name(&(dsb->lock), "DSOUNDBUFFER_lock");
/* register buffer if not primary */
if (!(dsbd->dwFlags & DSBCAPS_PRIMARYBUFFER)) {
@@ -1184,7 +1185,7 @@ HRESULT WINAPI IDirectSoundBufferImpl_Cr
if (err != DS_OK) {
HeapFree(GetProcessHeap(),0,dsb->buffer->memory);
HeapFree(GetProcessHeap(),0,dsb->buffer);
- dsb->lock.DebugInfo->Spare[1] = 0;
+ wine_dbg_remove_lock_name(&(dsb->lock));
DeleteCriticalSection(&(dsb->lock));
HeapFree(GetProcessHeap(),0,dsb->pwfx);
HeapFree(GetProcessHeap(),0,dsb);
Index: dlls/dsound/dsound.c
===================================================================
RCS file: /home/wine/wine/dlls/dsound/dsound.c,v
retrieving revision 1.30
diff -u -p -r1.30 dsound.c
--- dlls/dsound/dsound.c 25 Feb 2005 16:50:57 -0000 1.30
+++ dlls/dsound/dsound.c 12 Mar 2005 15:20:34 -0000
@@ -35,6 +35,7 @@
#include "dsound.h"
#include "dsdriver.h"
#include "dsound_private.h"
+#include "wine/library.h"
WINE_DEFAULT_DEBUG_CHANNEL(dsound);
@@ -285,7 +286,7 @@ static ULONG WINAPI IDirectSoundImpl_Rel
HeapFree(GetProcessHeap(),0,This->tmp_buffer);
HeapFree(GetProcessHeap(),0,This->buffer);
RtlDeleteResource(&This->buffer_list_lock);
- This->mixlock.DebugInfo->Spare[1] = 0;
+ wine_dbg_remove_lock_name(&This->mixlock);
DeleteCriticalSection(&This->mixlock);
HeapFree(GetProcessHeap(),0,This);
dsound = NULL;
@@ -581,13 +582,13 @@ static HRESULT WINAPI IDirectSoundImpl_D
CopyMemory(dsb->pwfx, pdsb->pwfx, size);
InitializeCriticalSection(&(dsb->lock));
- dsb->lock.DebugInfo->Spare[1] = (DWORD)"DSOUNDBUFFER_lock";
+ wine_dbg_add_lock_name(&(dsb->lock), "DSOUNDBUFFER_lock");
/* register buffer */
hres = DSOUND_AddBuffer(This, dsb);
if (hres != DS_OK) {
IDirectSoundBuffer8_Release(psb);
- dsb->lock.DebugInfo->Spare[1] = 0;
+ wine_dbg_remove_lock_name(&(dsb->lock));
DeleteCriticalSection(&(dsb->lock));
HeapFree(GetProcessHeap(),0,dsb->buffer);
HeapFree(GetProcessHeap(),0,dsb->pwfx);
@@ -943,7 +944,7 @@ HRESULT WINAPI IDirectSoundImpl_Create(
}
InitializeCriticalSection(&(pDS->mixlock));
- pDS->mixlock.DebugInfo->Spare[1] = (DWORD)"DSOUND_mixlock";
+ wine_dbg_add_lock_name(&(pDS->mixlock), "DSOUND_mixlock");
RtlInitializeResource(&(pDS->buffer_list_lock));
Index: include/wine/library.h
===================================================================
RCS file: /home/wine/wine/include/wine/library.h,v
retrieving revision 1.35
diff -u -p -r1.35 library.h
--- include/wine/library.h 11 Jan 2005 10:46:58 -0000 1.35
+++ include/wine/library.h 12 Mar 2005 15:20:39 -0000
@@ -67,6 +67,19 @@ extern int (*__wine_dbg_vlog)( unsigned
extern void wine_dbg_add_option( const char *name, unsigned char set, unsigned char clear );
extern int wine_dbg_parse_options( const char *str );
+inline static void wine_dbg_add_lock_name( CRITICAL_SECTION *cs, const char * name )
+{
+ cs->DebugInfo->Spare[1] = (DWORD)name;
+}
+inline static const char * wine_dbg_get_lock_name( CRITICAL_SECTION *cs )
+{
+ return (const char *)cs->DebugInfo->Spare[1];
+}
+inline static void wine_dbg_remove_lock_name( CRITICAL_SECTION *cs )
+{
+ cs->DebugInfo->Spare[1] = 0;
+}
+
/* portability */
extern void DECLSPEC_NORETURN wine_switch_to_stack( void (*func)(void *), void *arg, void *stack );
More information about the wine-devel
mailing list