[PATCH 5/5] d3drm: Release the child object after we're done with it in load_mesh_data() (Valgrind).

Henri Verbeet hverbeet at codeweavers.com
Thu Apr 30 09:46:41 CDT 2015


---
 dlls/d3drm/meshbuilder.c |   22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index e4d6d86..c24d9dc 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -1250,20 +1250,21 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *pData,
                     IDirectXFileData *data;
                     char **filename;
 
-                    hr = IDirectXFileObject_QueryInterface(material_child, &IID_IDirectXFileData, (void **)&data);
-                    if (FAILED(hr))
+                    if (FAILED(hr = IDirectXFileObject_QueryInterface(material_child,
+                            &IID_IDirectXFileData, (void **)&data)))
                     {
                         IDirectXFileDataReference *reference;
 
-                        hr = IDirectXFileObject_QueryInterface(material_child, &IID_IDirectXFileDataReference, (void **)&reference);
-                        if (FAILED(hr))
-                            goto end;
-
-                        hr = IDirectXFileDataReference_Resolve(reference, &data);
-                        IDirectXFileDataReference_Release(reference);
-                        if (FAILED(hr))
-                            goto end;
+                        if (SUCCEEDED(IDirectXFileObject_QueryInterface(material_child,
+                                &IID_IDirectXFileDataReference, (void **)&reference)))
+                        {
+                            hr = IDirectXFileDataReference_Resolve(reference, &data);
+                            IDirectXFileDataReference_Release(reference);
+                        }
                     }
+                    IDirectXFileObject_Release(material_child);
+                    if (FAILED(hr))
+                        goto end;
 
                     hr = IDirectXFileData_GetType(data, &guid);
                     if (hr != DXFILE_OK)
@@ -1308,6 +1309,7 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *pData,
                             }
                         }
                     }
+                    IDirectXFileData_Release(data);
                 }
                 else if (hr != DXFILEERR_NOMOREOBJECTS)
                 {
-- 
1.7.10.4




More information about the wine-patches mailing list