Module: wine Branch: master Commit: d0de7e72ec9afac274835bf4dba637ff7219c5bf URL: http://source.winehq.org/git/wine.git/?a=commit;h=d0de7e72ec9afac274835bf4db...
Author: Stefan Dösinger stefandoesinger@gmx.at Date: Mon May 21 00:05:06 2007 +0200
ddraw: Hold the lock in IDirect3DMaterial methods.
---
dlls/ddraw/material.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/dlls/ddraw/material.c b/dlls/ddraw/material.c index 5b7332e..24cb14f 100644 --- a/dlls/ddraw/material.c +++ b/dlls/ddraw/material.c @@ -149,8 +149,10 @@ IDirect3DMaterialImpl_Release(IDirect3DMaterial3 *iface) { if(This->Handle) { + EnterCriticalSection(&ddraw_cs); This->ddraw->d3ddevice->Handles[This->Handle - 1].ptr = NULL; This->ddraw->d3ddevice->Handles[This->Handle - 1].type = DDrawHandle_Unknown; + LeaveCriticalSection(&ddraw_cs); }
HeapFree(GetProcessHeap(), 0, This); @@ -246,9 +248,11 @@ IDirect3DMaterialImpl_SetMaterial(IDirect3DMaterial3 *iface, dump_material(lpMat);
/* Stores the material */ + EnterCriticalSection(&ddraw_cs); memset(&This->mat, 0, sizeof(This->mat)); memcpy(&This->mat, lpMat, lpMat->dwSize); - + LeaveCriticalSection(&ddraw_cs); + return DD_OK; }
@@ -278,9 +282,11 @@ IDirect3DMaterialImpl_GetMaterial(IDirect3DMaterial3 *iface, }
/* Copies the material structure */ + EnterCriticalSection(&ddraw_cs); dwSize = lpMat->dwSize; memset(lpMat, 0, dwSize); memcpy(lpMat, &This->mat, dwSize); + LeaveCriticalSection(&ddraw_cs);
return DD_OK; } @@ -309,6 +315,7 @@ IDirect3DMaterialImpl_GetHandle(IDirect3DMaterial3 *iface, IDirect3DDeviceImpl *device = ICOM_OBJECT(IDirect3DDeviceImpl, IDirect3DDevice3, lpDirect3DDevice3); TRACE("(%p/%p)->(%p,%p)\n", This, iface, device, lpHandle);
+ EnterCriticalSection(&ddraw_cs); This->active_device = device; if(!This->Handle) { @@ -316,6 +323,7 @@ IDirect3DMaterialImpl_GetHandle(IDirect3DMaterial3 *iface, if(!This->Handle) { ERR("Error creating a handle\n"); + LeaveCriticalSection(&ddraw_cs); return DDERR_INVALIDPARAMS; /* Unchecked */ } device->Handles[This->Handle - 1].ptr = This; @@ -323,6 +331,7 @@ IDirect3DMaterialImpl_GetHandle(IDirect3DMaterial3 *iface, } *lpHandle = This->Handle; TRACE(" returning handle %08x.\n", *lpHandle); + LeaveCriticalSection(&ddraw_cs);
return D3D_OK; }