ddraw: Protect the ddraw list.
This commit is contained in:
parent
09e794aff8
commit
3543a070ff
|
@ -58,8 +58,19 @@ WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
|
||||||
/* The configured default surface */
|
/* The configured default surface */
|
||||||
WINED3DSURFTYPE DefaultSurfaceType = SURFACE_UNKNOWN;
|
WINED3DSURFTYPE DefaultSurfaceType = SURFACE_UNKNOWN;
|
||||||
|
|
||||||
|
/* DDraw list and critical section */
|
||||||
static struct list global_ddraw_list = LIST_INIT(global_ddraw_list);
|
static struct list global_ddraw_list = LIST_INIT(global_ddraw_list);
|
||||||
|
|
||||||
|
static CRITICAL_SECTION ddraw_list_cs;
|
||||||
|
static CRITICAL_SECTION_DEBUG ddraw_list_cs_debug =
|
||||||
|
{
|
||||||
|
0, 0, &ddraw_list_cs,
|
||||||
|
{ &ddraw_list_cs_debug.ProcessLocksList,
|
||||||
|
&ddraw_list_cs_debug.ProcessLocksList },
|
||||||
|
0, 0, { (DWORD_PTR)(__FILE__ ": ddraw_list_cs") }
|
||||||
|
};
|
||||||
|
static CRITICAL_SECTION ddraw_list_cs = { &ddraw_list_cs_debug, -1, 0, 0, 0, 0 };
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
*
|
*
|
||||||
* Helper function for DirectDrawCreate and friends
|
* Helper function for DirectDrawCreate and friends
|
||||||
|
@ -304,7 +315,9 @@ DDRAW_Create(GUID *guid,
|
||||||
#undef CKEY_CAPS
|
#undef CKEY_CAPS
|
||||||
#undef FX_CAPS
|
#undef FX_CAPS
|
||||||
|
|
||||||
|
EnterCriticalSection(&ddraw_list_cs);
|
||||||
list_add_head(&global_ddraw_list, &This->ddraw_list_entry);
|
list_add_head(&global_ddraw_list, &This->ddraw_list_entry);
|
||||||
|
LeaveCriticalSection(&ddraw_list_cs);
|
||||||
|
|
||||||
/* Call QueryInterface to get the pointer to the requested interface. This also initializes
|
/* Call QueryInterface to get the pointer to the requested interface. This also initializes
|
||||||
* The required refcount
|
* The required refcount
|
||||||
|
@ -929,5 +942,7 @@ DllMain(HINSTANCE hInstDLL,
|
||||||
void
|
void
|
||||||
remove_ddraw_object(IDirectDrawImpl *ddraw)
|
remove_ddraw_object(IDirectDrawImpl *ddraw)
|
||||||
{
|
{
|
||||||
|
EnterCriticalSection(&ddraw_list_cs);
|
||||||
list_remove(&ddraw->ddraw_list_entry);
|
list_remove(&ddraw->ddraw_list_entry);
|
||||||
|
LeaveCriticalSection(&ddraw_list_cs);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue