ddraw: Hold the lock in IDirectDrawClipper methods.
This commit is contained in:
parent
d5d7d4dae4
commit
0086d490a9
|
@ -106,8 +106,10 @@ static ULONG WINAPI IDirectDrawClipperImpl_Release(IDirectDrawClipper *iface) {
|
||||||
|
|
||||||
if (ref == 0)
|
if (ref == 0)
|
||||||
{
|
{
|
||||||
|
EnterCriticalSection(&ddraw_cs);
|
||||||
IWineD3DClipper_Release(This->wineD3DClipper);
|
IWineD3DClipper_Release(This->wineD3DClipper);
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
else return ref;
|
else return ref;
|
||||||
|
@ -135,9 +137,11 @@ static HRESULT WINAPI IDirectDrawClipperImpl_SetHwnd(
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
TRACE("(%p)->(%08x,%p)\n", This, dwFlags, hWnd);
|
TRACE("(%p)->(%08x,%p)\n", This, dwFlags, hWnd);
|
||||||
|
|
||||||
|
EnterCriticalSection(&ddraw_cs);
|
||||||
hr = IWineD3DClipper_SetHWnd(This->wineD3DClipper,
|
hr = IWineD3DClipper_SetHWnd(This->wineD3DClipper,
|
||||||
dwFlags,
|
dwFlags,
|
||||||
hWnd);
|
hWnd);
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
switch(hr)
|
switch(hr)
|
||||||
{
|
{
|
||||||
case WINED3DERR_INVALIDCALL: return DDERR_INVALIDPARAMS;
|
case WINED3DERR_INVALIDCALL: return DDERR_INVALIDPARAMS;
|
||||||
|
@ -168,12 +172,16 @@ static HRESULT WINAPI IDirectDrawClipperImpl_GetClipList(
|
||||||
LPDWORD lpdwSize)
|
LPDWORD lpdwSize)
|
||||||
{
|
{
|
||||||
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
||||||
|
HRESULT hr;
|
||||||
TRACE("(%p,%p,%p,%p)\n", This, lpRect, lpClipList, lpdwSize);
|
TRACE("(%p,%p,%p,%p)\n", This, lpRect, lpClipList, lpdwSize);
|
||||||
|
|
||||||
return IWineD3DClipper_GetClipList(This->wineD3DClipper,
|
EnterCriticalSection(&ddraw_cs);
|
||||||
|
hr = IWineD3DClipper_GetClipList(This->wineD3DClipper,
|
||||||
lpRect,
|
lpRect,
|
||||||
lpClipList,
|
lpClipList,
|
||||||
lpdwSize);
|
lpdwSize);
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -194,10 +202,14 @@ static HRESULT WINAPI IDirectDrawClipperImpl_SetClipList(
|
||||||
LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,DWORD dwFlag
|
LPDIRECTDRAWCLIPPER iface,LPRGNDATA lprgn,DWORD dwFlag
|
||||||
) {
|
) {
|
||||||
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
return IWineD3DClipper_SetClipList(This->wineD3DClipper,
|
EnterCriticalSection(&ddraw_cs);
|
||||||
|
hr = IWineD3DClipper_SetClipList(This->wineD3DClipper,
|
||||||
lprgn,
|
lprgn,
|
||||||
dwFlag);
|
dwFlag);
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -215,10 +227,14 @@ static HRESULT WINAPI IDirectDrawClipperImpl_GetHWnd(
|
||||||
LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr
|
LPDIRECTDRAWCLIPPER iface, HWND* hWndPtr
|
||||||
) {
|
) {
|
||||||
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
||||||
|
HRESULT hr;
|
||||||
TRACE("(%p)->(%p)\n", This, hWndPtr);
|
TRACE("(%p)->(%p)\n", This, hWndPtr);
|
||||||
|
|
||||||
return IWineD3DClipper_GetHWnd(This->wineD3DClipper,
|
EnterCriticalSection(&ddraw_cs);
|
||||||
|
hr = IWineD3DClipper_GetHWnd(This->wineD3DClipper,
|
||||||
hWndPtr);
|
hWndPtr);
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
|
return hr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -242,11 +258,17 @@ static HRESULT WINAPI IDirectDrawClipperImpl_Initialize(
|
||||||
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
IDirectDrawClipperImpl *This = (IDirectDrawClipperImpl *)iface;
|
||||||
TRACE("(%p)->(%p,0x%08x)\n", This, lpDD, dwFlags);
|
TRACE("(%p)->(%p,0x%08x)\n", This, lpDD, dwFlags);
|
||||||
|
|
||||||
if (This->ddraw_owner != NULL) return DDERR_ALREADYINITIALIZED;
|
EnterCriticalSection(&ddraw_cs);
|
||||||
|
if (This->ddraw_owner != NULL)
|
||||||
|
{
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
|
return DDERR_ALREADYINITIALIZED;
|
||||||
|
}
|
||||||
|
|
||||||
pOwner = ICOM_OBJECT(IDirectDrawImpl, IDirectDraw, lpDD);
|
pOwner = ICOM_OBJECT(IDirectDrawImpl, IDirectDraw, lpDD);
|
||||||
This->ddraw_owner = pOwner;
|
This->ddraw_owner = pOwner;
|
||||||
|
|
||||||
|
LeaveCriticalSection(&ddraw_cs);
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue