d3drm/tests: Release two retrieved interfaces to allow proper cleanup. (try 2)
Bernhard Übelacker
bernhardu at vr-web.de
Fri Oct 16 16:02:01 CDT 2015
Bug #36748: valgrind shows two possible leaks in d3drm/tests/d3drm.c
try 2:
- No explicit IDirect3DRMFrame_DeleteChild needed.
Supersedes 115347.
Message from valgrind before:
==10558== 120 bytes in 1 blocks are possibly lost in loss record 800 of 1,583
==10558== at 0x7BC4F6B7: initialize_block (heap.c:232)
==10558== by 0x7BC4F6B7: RtlAllocateHeap (???:0)
==10558== by 0x4D66128: Direct3DRMFrame_create (frame.c:2280)
==10558== by 0x4D55225: d3drm1_CreateFrame (d3drm.c:152)
==10558== by 0x4C1F88C: test_Frame (d3drm.c:902)
==10558== by 0x4C29085: func_d3drm (d3drm.c:3701)
==10558== by 0x4C195D8: main (test.h:584)
==10558==
==10558== 120 bytes in 1 blocks are possibly lost in loss record 801 of 1,583
==10558== at 0x7BC4F6B7: initialize_block (heap.c:232)
==10558== by 0x7BC4F6B7: RtlAllocateHeap (???:0)
==10558== by 0x4D66128: Direct3DRMFrame_create (frame.c:2280)
==10558== by 0x4D55225: d3drm1_CreateFrame (d3drm.c:152)
==10558== by 0x4C1FCE9: test_Frame (d3drm.c:941)
==10558== by 0x4C29085: func_d3drm (d3drm.c:3701)
==10558== by 0x4C195D8: main (test.h:584)
Signed-off-by: Bernhard Übelacker <bernhardu at vr-web.de>
---
dlls/d3drm/tests/d3drm.c | 26 +++++++++++++++-----------
1 file changed, 15 insertions(+), 11 deletions(-)
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index 06c2c54..d8fd2c1 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -993,6 +993,8 @@ static void test_Frame(void)
ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
ok(pFrameTmp == pFrameP1, "pFrameTmp = %p\n", pFrameTmp);
CHECK_REFCOUNT(pFrameP1, 2);
+ IDirect3DRMFrame_Release(pFrameTmp);
+ CHECK_REFCOUNT(pFrameP1, 1);
/* Add child to second parent */
hr = IDirect3DRM_CreateFrame(d3drm, NULL, &pFrameP2);
@@ -1036,6 +1038,8 @@ static void test_Frame(void)
ok(pFrameTmp == pFrameP2, "pFrameTmp = %p\n", pFrameTmp);
CHECK_REFCOUNT(pFrameP2, 2);
CHECK_REFCOUNT(pFrameC, 2);
+ IDirect3DRMFrame_Release(pFrameTmp);
+ CHECK_REFCOUNT(pFrameP2, 1);
/* Add child again */
hr = IDirect3DRMFrame_AddChild(pFrameP2, pFrameC);
@@ -1087,7 +1091,7 @@ static void test_Frame(void)
hr = IDirect3DRMFrame_AddChild(pFrameP2, pFrameP1);
ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
frame_array = NULL;
hr = IDirect3DRMFrame_GetChildren(pFrameP2, &frame_array);
@@ -1110,11 +1114,11 @@ static void test_Frame(void)
/* [Add/Delete]Visual with NULL pointer */
hr = IDirect3DRMFrame_AddVisual(pFrameP1, NULL);
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
hr = IDirect3DRMFrame_DeleteVisual(pFrameP1, NULL);
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
/* Create Visual */
hr = IDirect3DRM_CreateMeshBuilder(d3drm, &mesh_builder);
@@ -1124,7 +1128,7 @@ static void test_Frame(void)
/* Add Visual to first parent */
hr = IDirect3DRMFrame_AddVisual(pFrameP1, visual1);
ok(hr == D3DRM_OK, "Cannot add visual (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
CHECK_REFCOUNT(visual1, 2);
visual_array = NULL;
@@ -1144,17 +1148,17 @@ static void test_Frame(void)
/* Delete Visual */
hr = IDirect3DRMFrame_DeleteVisual(pFrameP1, visual1);
ok(hr == D3DRM_OK, "Cannot delete visual (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
IDirect3DRMMeshBuilder_Release(mesh_builder);
/* [Add/Delete]Light with NULL pointer */
hr = IDirect3DRMFrame_AddLight(pFrameP1, NULL);
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
hr = IDirect3DRMFrame_DeleteLight(pFrameP1, NULL);
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
/* Create Light */
hr = IDirect3DRM_CreateLightRGB(d3drm, D3DRMLIGHT_SPOT, 0.1, 0.2, 0.3, &light1);
@@ -1163,7 +1167,7 @@ static void test_Frame(void)
/* Add Light to first parent */
hr = IDirect3DRMFrame_AddLight(pFrameP1, light1);
ok(hr == D3DRM_OK, "Cannot add light (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
CHECK_REFCOUNT(light1, 2);
light_array = NULL;
@@ -1183,7 +1187,7 @@ static void test_Frame(void)
/* Delete Light */
hr = IDirect3DRMFrame_DeleteLight(pFrameP1, light1);
ok(hr == D3DRM_OK, "Cannot delete light (hr = %x)\n", hr);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameP1, 2);
IDirect3DRMLight_Release(light1);
/* Test SceneBackground on first parent */
@@ -1202,8 +1206,8 @@ static void test_Frame(void)
/* Cleanup */
IDirect3DRMFrame_Release(pFrameP2);
- CHECK_REFCOUNT(pFrameC, 2);
- CHECK_REFCOUNT(pFrameP1, 3);
+ CHECK_REFCOUNT(pFrameC, 1);
+ CHECK_REFCOUNT(pFrameP1, 1);
IDirect3DRMFrame_Release(pFrameC);
IDirect3DRMFrame_Release(pFrameP1);
--
2.1.4
More information about the wine-patches
mailing list