Module: wine Branch: master Commit: a2227de7af273bfc4469850ad3384bc137c1261e URL: http://source.winehq.org/git/wine.git/?a=commit;h=a2227de7af273bfc4469850ad3...
Author: Stefan Dösinger stefan@codeweavers.com Date: Wed May 30 16:11:25 2007 +0200
ddraw: Hold the lock in IDirectDrawPalette methods.
---
dlls/ddraw/palette.c | 20 +++++++++++++++++--- 1 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/ddraw/palette.c b/dlls/ddraw/palette.c index afe95cc..44fbe03 100644 --- a/dlls/ddraw/palette.c +++ b/dlls/ddraw/palette.c @@ -105,11 +105,13 @@ IDirectDrawPaletteImpl_Release(IDirectDrawPalette *iface)
if (ref == 0) { + EnterCriticalSection(&ddraw_cs); IWineD3DPalette_Release(This->wineD3DPalette); if(This->ifaceToRelease) { IUnknown_Release(This->ifaceToRelease); } + LeaveCriticalSection(&ddraw_cs); HeapFree(GetProcessHeap(), 0, This); }
@@ -160,9 +162,13 @@ IDirectDrawPaletteImpl_GetCaps(IDirectDrawPalette *iface, DWORD *Caps) { ICOM_THIS_FROM(IDirectDrawPaletteImpl, IDirectDrawPalette, iface); + HRESULT hr; TRACE("(%p)->(%p): Relay\n", This, Caps);
- return IWineD3DPalette_GetCaps(This->wineD3DPalette, Caps); + EnterCriticalSection(&ddraw_cs); + hr = IWineD3DPalette_GetCaps(This->wineD3DPalette, Caps); + LeaveCriticalSection(&ddraw_cs); + return hr; }
/***************************************************************************** @@ -191,12 +197,16 @@ IDirectDrawPaletteImpl_SetEntries(IDirectDrawPalette *iface, PALETTEENTRY *PalEnt) { ICOM_THIS_FROM(IDirectDrawPaletteImpl, IDirectDrawPalette, iface); + HRESULT hr; TRACE("(%p)->(%x,%d,%d,%p): Relay\n", This, Flags, Start, Count, PalEnt);
if(!PalEnt) return DDERR_INVALIDPARAMS;
- return IWineD3DPalette_SetEntries(This->wineD3DPalette, Flags, Start, Count, PalEnt); + EnterCriticalSection(&ddraw_cs); + hr = IWineD3DPalette_SetEntries(This->wineD3DPalette, Flags, Start, Count, PalEnt); + LeaveCriticalSection(&ddraw_cs); + return hr; }
/***************************************************************************** @@ -224,12 +234,16 @@ IDirectDrawPaletteImpl_GetEntries(IDirectDrawPalette *iface, PALETTEENTRY *PalEnt) { ICOM_THIS_FROM(IDirectDrawPaletteImpl, IDirectDrawPalette, iface); + HRESULT hr; TRACE("(%p)->(%x,%d,%d,%p): Relay\n", This, Flags, Start, Count, PalEnt);
if(!PalEnt) return DDERR_INVALIDPARAMS;
- return IWineD3DPalette_GetEntries(This->wineD3DPalette, Flags, Start, Count, PalEnt); + EnterCriticalSection(&ddraw_cs); + hr = IWineD3DPalette_GetEntries(This->wineD3DPalette, Flags, Start, Count, PalEnt); + LeaveCriticalSection(&ddraw_cs); + return hr; }
const IDirectDrawPaletteVtbl IDirectDrawPalette_Vtbl =