Henri Verbeet : ddraw: Release the surface clipper (if any) in ddraw_surface_wined3d_object_destroyed() (Valgrind).

Alexandre Julliard julliard at wine.codeweavers.com
Thu Apr 30 07:19:29 CDT 2015


Module: wine
Branch: master
Commit: 4a416f8d37ca87d1f42cc536dee2be9f0fccba64
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4a416f8d37ca87d1f42cc536dee2be9f0fccba64

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Apr 29 17:27:34 2015 +0200

ddraw: Release the surface clipper (if any) in ddraw_surface_wined3d_object_destroyed() (Valgrind).

---

 dlls/ddraw/surface.c      | 3 +++
 dlls/ddraw/tests/ddraw1.c | 4 +++-
 dlls/ddraw/tests/ddraw2.c | 4 +++-
 dlls/ddraw/tests/ddraw4.c | 4 +++-
 dlls/ddraw/tests/ddraw7.c | 4 +++-
 5 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index 0d2d731..f716cfc 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -5615,6 +5615,9 @@ static void STDMETHODCALLTYPE ddraw_surface_wined3d_object_destroyed(void *paren
     /* Reduce the ddraw surface count. */
     list_remove(&surface->surface_list_entry);
 
+    if (surface->clipper)
+        IDirectDrawClipper_Release(&surface->clipper->IDirectDrawClipper_iface);
+
     if (surface == surface->ddraw->primary)
         surface->ddraw->primary = NULL;
 
diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c
index 839b2b7..9860957 100644
--- a/dlls/ddraw/tests/ddraw1.c
+++ b/dlls/ddraw/tests/ddraw1.c
@@ -627,6 +627,7 @@ static void test_clipper_blt(void)
     IDirectDraw *ddraw;
     RGNDATA *rgn_data;
     D3DCOLOR color;
+    ULONG refcount;
     HRGN r1, r2;
     HWND window;
     DDBLTFX fx;
@@ -819,7 +820,8 @@ static void test_clipper_blt(void)
 
     IDirectDrawSurface_Release(dst_surface);
     IDirectDrawSurface_Release(src_surface);
-    IDirectDrawClipper_Release(clipper);
+    refcount = IDirectDrawClipper_Release(clipper);
+    ok(!refcount, "Clipper has %u references left.\n", refcount);
     IDirectDraw_Release(ddraw);
 }
 
diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c
index 42f65bc..29971e5 100644
--- a/dlls/ddraw/tests/ddraw2.c
+++ b/dlls/ddraw/tests/ddraw2.c
@@ -521,6 +521,7 @@ static void test_clipper_blt(void)
     IDirectDraw2 *ddraw;
     RGNDATA *rgn_data;
     D3DCOLOR color;
+    ULONG refcount;
     HRGN r1, r2;
     HWND window;
     DDBLTFX fx;
@@ -713,7 +714,8 @@ static void test_clipper_blt(void)
 
     IDirectDrawSurface_Release(dst_surface);
     IDirectDrawSurface_Release(src_surface);
-    IDirectDrawClipper_Release(clipper);
+    refcount = IDirectDrawClipper_Release(clipper);
+    ok(!refcount, "Clipper has %u references left.\n", refcount);
     IDirectDraw2_Release(ddraw);
 }
 
diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c
index ddb7a1d..c3f6f95 100644
--- a/dlls/ddraw/tests/ddraw4.c
+++ b/dlls/ddraw/tests/ddraw4.c
@@ -742,6 +742,7 @@ static void test_clipper_blt(void)
     IDirectDraw4 *ddraw;
     RGNDATA *rgn_data;
     D3DCOLOR color;
+    ULONG refcount;
     HRGN r1, r2;
     HWND window;
     DDBLTFX fx;
@@ -934,7 +935,8 @@ static void test_clipper_blt(void)
 
     IDirectDrawSurface4_Release(dst_surface);
     IDirectDrawSurface4_Release(src_surface);
-    IDirectDrawClipper_Release(clipper);
+    refcount = IDirectDrawClipper_Release(clipper);
+    ok(!refcount, "Clipper has %u references left.\n", refcount);
     IDirectDraw4_Release(ddraw);
 }
 
diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c
index 1f43646..e151fb7 100644
--- a/dlls/ddraw/tests/ddraw7.c
+++ b/dlls/ddraw/tests/ddraw7.c
@@ -666,6 +666,7 @@ static void test_clipper_blt(void)
     IDirectDraw7 *ddraw;
     RGNDATA *rgn_data;
     D3DCOLOR color;
+    ULONG refcount;
     HRGN r1, r2;
     HWND window;
     DDBLTFX fx;
@@ -858,7 +859,8 @@ static void test_clipper_blt(void)
 
     IDirectDrawSurface7_Release(dst_surface);
     IDirectDrawSurface7_Release(src_surface);
-    IDirectDrawClipper_Release(clipper);
+    refcount = IDirectDrawClipper_Release(clipper);
+    ok(!refcount, "Clipper has %u references left.\n", refcount);
     IDirectDraw7_Release(ddraw);
 }
 




More information about the wine-cvs mailing list