Re: [8/8] DDraw: Make IDirectDrawImpl thread safe
Stefan Dösinger <stefan(a)codeweavers.com> writes:
@@ -2731,9 +2792,13 @@ IDirectDrawImpl_EnumSurfaces(IDirectDraw7 *iface, desc = surf->surface_desc; IDirectDrawSurface7_AddRef(ICOM_INTERFACE(surf, IDirectDrawSurface7)); if(Callback( ICOM_INTERFACE(surf, IDirectDrawSurface7), &desc, Context) != DDENUMRET_OK) + { + DDOBJ_UNLOCK(This); return DD_OK; + }
It don't think you can call an arbitrary callback function with the lock held. -- Alexandre Julliard julliard(a)winehq.org
Am Freitag 11 Mai 2007 11:29 schrieb Alexandre Julliard:
Stefan Dösinger <stefan(a)codeweavers.com> writes:
@@ -2731,9 +2792,13 @@ IDirectDrawImpl_EnumSurfaces(IDirectDraw7 *iface, desc = surf->surface_desc; IDirectDrawSurface7_AddRef(ICOM_INTERFACE(surf, IDirectDrawSurface7)); if(Callback( ICOM_INTERFACE(surf, IDirectDrawSurface7), &desc, Context) != DDENUMRET_OK) + { + DDOBJ_UNLOCK(This); return DD_OK; + }
It don't think you can call an arbitrary callback function with the lock held. Makes sense. I'll write a test to see how windows behaves if another thread creates a surface while a thread sleeps in the callback.
participants (2)
-
Alexandre Julliard -
Stefan Dösinger