Ričardas Barkauskas : ddraw: Use ddraw_surface_release_iface to destroy leftover surfaces.
Alexandre Julliard
julliard at winehq.org
Tue Jun 28 17:25:15 CDT 2011
Module: wine
Branch: master
Commit: c7e5e6d2b520312320a18b447472b0b8d32d295e
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c7e5e6d2b520312320a18b447472b0b8d32d295e
Author: Ričardas Barkauskas <rbarkauskas at codeweavers.com>
Date: Tue Jun 28 01:06:16 2011 +0300
ddraw: Use ddraw_surface_release_iface to destroy leftover surfaces.
---
dlls/ddraw/ddraw_private.h | 1 +
dlls/ddraw/main.c | 7 +++----
dlls/ddraw/surface.c | 6 +++---
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index e15219d..1a8dc20 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -212,6 +212,7 @@ HRESULT ddraw_surface_create_texture(IDirectDrawSurfaceImpl *surface) DECLSPEC_H
void ddraw_surface_destroy(IDirectDrawSurfaceImpl *surface) DECLSPEC_HIDDEN;
HRESULT ddraw_surface_init(IDirectDrawSurfaceImpl *surface, IDirectDrawImpl *ddraw,
DDSURFACEDESC2 *desc, UINT mip_level, WINED3DSURFTYPE surface_type, UINT version) DECLSPEC_HIDDEN;
+ULONG ddraw_surface_release_iface(IDirectDrawSurfaceImpl *This) DECLSPEC_HIDDEN;
static inline IDirectDrawSurfaceImpl *surface_from_texture1(IDirect3DTexture *iface)
{
diff --git a/dlls/ddraw/main.c b/dlls/ddraw/main.c
index 36c0ef7..37404d8 100644
--- a/dlls/ddraw/main.c
+++ b/dlls/ddraw/main.c
@@ -752,7 +752,7 @@ DestroyCallback(IDirectDrawSurface7 *surf,
void *context)
{
IDirectDrawSurfaceImpl *Impl = impl_from_IDirectDrawSurface7(surf);
- ULONG ref, ref3, ref2;
+ ULONG ref, ref3, ref2, iface_count;
ref = IDirectDrawSurface7_Release(surf); /* For the EnumSurfaces */
IDirectDrawSurface3_AddRef(&Impl->IDirectDrawSurface3_iface);
@@ -769,9 +769,8 @@ DestroyCallback(IDirectDrawSurface7 *surf,
return DDENUMRET_OK;
/* Destroy the surface */
- while (ref) ref = IDirectDrawSurface7_Release(surf);
- while (ref3) ref3 = IDirectDrawSurface3_Release(&Impl->IDirectDrawSurface3_iface);
- while (ref2) ref2 = IDirectDrawSurface2_Release(&Impl->IDirectDrawSurface2_iface);
+ iface_count = ddraw_surface_release_iface(Impl);
+ while (iface_count) iface_count = ddraw_surface_release_iface(Impl);
return DDENUMRET_OK;
}
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 102aa55..e391b3d 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -449,7 +449,7 @@ static void ddraw_surface_cleanup(IDirectDrawSurfaceImpl *surface)
IUnknown_Release(ifaceToRelease);
}
-static void ddraw_surface_release_iface(IDirectDrawSurfaceImpl *This)
+ULONG ddraw_surface_release_iface(IDirectDrawSurfaceImpl *This)
{
ULONG iface_count = InterlockedDecrement(&This->iface_count);
TRACE("%p decreasing iface count to %u.\n", This, iface_count);
@@ -462,7 +462,7 @@ static void ddraw_surface_release_iface(IDirectDrawSurfaceImpl *This)
{
WARN("(%p) Attempt to destroy a surface that is not a complex root\n", This);
LeaveCriticalSection(&ddraw_cs);
- return;
+ return iface_count;
}
if (This->wined3d_texture) /* If it's a texture, destroy the wined3d texture. */
wined3d_texture_decref(This->wined3d_texture);
@@ -471,7 +471,7 @@ static void ddraw_surface_release_iface(IDirectDrawSurfaceImpl *This)
LeaveCriticalSection(&ddraw_cs);
}
- return;
+ return iface_count;
}
/*****************************************************************************
More information about the wine-cvs
mailing list