ddraw: Hold the lock in creation functions.
This commit is contained in:
parent
5307dd2029
commit
bfe631dfb9
|
@ -268,7 +268,9 @@ IDirectDrawImpl_Destroy(IDirectDrawImpl *This)
|
|||
/* Unregister the window class */
|
||||
UnregisterClassA(This->classname, 0);
|
||||
|
||||
remove_ddraw_object(This);
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
list_remove(&This->ddraw_list_entry);
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
|
||||
/* Release the attached WineD3D stuff */
|
||||
IWineD3DDevice_Release(This->wineD3DDevice);
|
||||
|
|
|
@ -203,9 +203,6 @@ IWineD3DVertexDeclaration *
|
|||
IDirectDrawImpl_FindDecl(IDirectDrawImpl *This,
|
||||
DWORD fvf);
|
||||
|
||||
void
|
||||
remove_ddraw_object(IDirectDrawImpl *ddraw);
|
||||
|
||||
/* The default surface type */
|
||||
extern WINED3DSURFTYPE DefaultSurfaceType;
|
||||
|
||||
|
|
|
@ -317,10 +317,7 @@ DDRAW_Create(const GUID *guid,
|
|||
#undef FX_CAPS
|
||||
|
||||
list_init(&This->surface_list);
|
||||
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
list_add_head(&global_ddraw_list, &This->ddraw_list_entry);
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
|
||||
This->decls = HeapAlloc(GetProcessHeap(), 0, 0);
|
||||
if(!This->decls)
|
||||
|
@ -358,9 +355,13 @@ DirectDrawCreate(GUID *GUID,
|
|||
IDirectDraw **DD,
|
||||
IUnknown *UnkOuter)
|
||||
{
|
||||
HRESULT hr;
|
||||
TRACE("(%s,%p,%p)\n", debugstr_guid(GUID), DD, UnkOuter);
|
||||
|
||||
return DDRAW_Create(GUID, (void **) DD, UnkOuter, &IID_IDirectDraw);
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
hr = DDRAW_Create(GUID, (void **) DD, UnkOuter, &IID_IDirectDraw);
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
return hr;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -378,12 +379,16 @@ DirectDrawCreateEx(GUID *GUID,
|
|||
REFIID iid,
|
||||
IUnknown *UnkOuter)
|
||||
{
|
||||
HRESULT hr;
|
||||
TRACE("(%s,%p,%s,%p)\n", debugstr_guid(GUID), DD, debugstr_guid(iid), UnkOuter);
|
||||
|
||||
if (!IsEqualGUID(iid, &IID_IDirectDraw7))
|
||||
return DDERR_INVALIDPARAMS;
|
||||
|
||||
return DDRAW_Create(GUID, DD, UnkOuter, iid);
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
hr = DDRAW_Create(GUID, DD, UnkOuter, iid);
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
return hr;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -513,7 +518,9 @@ CF_CreateDirectDraw(IUnknown* UnkOuter, REFIID iid,
|
|||
|
||||
TRACE("(%p,%s,%p)\n", UnkOuter, debugstr_guid(iid), obj);
|
||||
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
hr = DDRAW_Create(NULL, obj, UnkOuter, iid);
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
@ -538,11 +545,18 @@ CF_CreateDirectDrawClipper(IUnknown* UnkOuter, REFIID riid,
|
|||
HRESULT hr;
|
||||
IDirectDrawClipper *Clip;
|
||||
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
hr = DirectDrawCreateClipper(0, &Clip, UnkOuter);
|
||||
if (hr != DD_OK) return hr;
|
||||
if (hr != DD_OK)
|
||||
{
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
return hr;
|
||||
}
|
||||
|
||||
hr = IDirectDrawClipper_QueryInterface(Clip, riid, obj);
|
||||
IDirectDrawClipper_Release(Clip);
|
||||
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
return hr;
|
||||
}
|
||||
|
||||
|
@ -751,8 +765,14 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID *ppv)
|
|||
*/
|
||||
HRESULT WINAPI DllCanUnloadNow(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
FIXME("(void): stub\n");
|
||||
return S_FALSE;
|
||||
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
hr = S_FALSE;
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
|
||||
return hr;
|
||||
}
|
||||
|
||||
/*******************************************************************************
|
||||
|
@ -943,11 +963,3 @@ DllMain(HINSTANCE hInstDLL,
|
|||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void
|
||||
remove_ddraw_object(IDirectDrawImpl *ddraw)
|
||||
{
|
||||
EnterCriticalSection(&ddraw_cs);
|
||||
list_remove(&ddraw->ddraw_list_entry);
|
||||
LeaveCriticalSection(&ddraw_cs);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue