Jeff Smith : d3drm: Fix reference leak in d3drm_viewport2_Clear().

Alexandre Julliard julliard at winehq.org
Mon Nov 25 09:12:28 CST 2019


Module: wine
Branch: stable
Commit: 1d787b707b8d52291cba7d788581d0b0d3b6da30
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=1d787b707b8d52291cba7d788581d0b0d3b6da30

Author: Jeff Smith <whydoubt at gmail.com>
Date:   Mon Jul  1 12:17:29 2019 -0500

d3drm: Fix reference leak in d3drm_viewport2_Clear().

Signed-off-by: Jeff Smith <whydoubt at gmail.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 8fb032916d6bfc1d0006392904b9dc5344b8e1a3)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/d3drm/tests/d3drm.c | 4 ++++
 dlls/d3drm/viewport.c    | 1 +
 2 files changed, 5 insertions(+)

diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 5157952d63..987e3896c4 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -6342,10 +6342,12 @@ static void test_viewport_clear1(void)
     ret_color = IDirect3DRMFrame_GetSceneBackground(camera1);
     ok(ret_color == 0xff00ff00, "Expected scene color returned == 0xff00ff00, got %#x.\n", ret_color);
 
+    CHECK_REFCOUNT(frame1, 1);
     hr = IDirect3DRMViewport_Clear(viewport1);
     ok(SUCCEEDED(hr), "Cannot clear viewport (hr = %#x).\n", hr);
     ret_color = get_surface_color(surface, 320, 240);
     ok(compare_color(ret_color, 0x00ffffff, 1), "Got unexpected color 0x%08x.\n", ret_color);
+    CHECK_REFCOUNT(frame1, 1);
 
     hr = IDirect3DRMFrame_SetSceneBackgroundRGB(frame1, 0.0f, 0.0f, 1.0f);
     ok(SUCCEEDED(hr), "Cannot set scene background RGB (hr = %#x)\n", hr);
@@ -6545,10 +6547,12 @@ static void test_viewport_clear2(void)
     ret_color = IDirect3DRMFrame3_GetSceneBackground(camera3);
     ok(ret_color == 0xff00ff00, "Expected scene color returned == 0xff00ff00, got %#x.\n", ret_color);
 
+    CHECK_REFCOUNT(frame3, 1);
     hr = IDirect3DRMViewport2_Clear(viewport2, D3DRMCLEAR_ALL);
     ok(SUCCEEDED(hr), "Cannot clear viewport (hr = %#x).\n", hr);
     ret_color = get_surface_color(surface, 320, 240);
     ok(compare_color(ret_color, 0x00ffffff, 1), "Got unexpected color 0x%08x.\n", ret_color);
+    CHECK_REFCOUNT(frame3, 1);
 
     hr = IDirect3DRMViewport2_GetDirect3DViewport(viewport2, &d3d_viewport);
     ok(SUCCEEDED(hr), "Cannot get IDirect3DViewport interface (hr = %#x).\n", hr);
diff --git a/dlls/d3drm/viewport.c b/dlls/d3drm/viewport.c
index 5c0e24bc42..cabffc512c 100644
--- a/dlls/d3drm/viewport.c
+++ b/dlls/d3drm/viewport.c
@@ -53,6 +53,7 @@ static HRESULT d3drm_update_background_material(struct d3drm_viewport *viewport)
     if (FAILED(hr = IDirect3DRMFrame_GetScene(viewport->camera, &root_frame)))
         return hr;
     color = IDirect3DRMFrame_GetSceneBackground(root_frame);
+    IDirect3DRMFrame_Release(root_frame);
 
     memset(&mat, 0, sizeof(mat));
     mat.dwSize = sizeof(mat);




More information about the wine-cvs mailing list