Henri Verbeet : d3drm: Release the child object after we' re done with it in load_data() (Valgrind).

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 1 07:50:09 CDT 2015


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Thu Apr 30 16:46:40 2015 +0200

d3drm: Release the child object after we're done with it in load_data() (Valgrind).

---

 dlls/d3drm/d3drm.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c
index 725093f..7b74cfb 100644
--- a/dlls/d3drm/d3drm.c
+++ b/dlls/d3drm/d3drm.c
@@ -1173,32 +1173,29 @@ static HRESULT load_data(IDirect3DRM3 *iface, IDirectXFileData *data_object, IID
                     IDirectXFileDataReference *reference;
                     IDirectXFileBinary *binary;
 
-                    hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileBinary, (void **)&binary);
-                    if (SUCCEEDED(hr))
+                    if (SUCCEEDED(IDirectXFileObject_QueryInterface(child,
+                            &IID_IDirectXFileBinary, (void **)&binary)))
                     {
                         FIXME("Binary Object not supported yet\n");
                         IDirectXFileBinary_Release(binary);
-                        continue;
                     }
-
-                    hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileData, (void **)&data);
-                    if (SUCCEEDED(hr))
+                    else if (SUCCEEDED(IDirectXFileObject_QueryInterface(child,
+                            &IID_IDirectXFileData, (void **)&data)))
                     {
                         TRACE("Found Data Object\n");
                         hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
                         IDirectXFileData_Release(data);
-                        continue;
                     }
-                    hr = IDirectXFileObject_QueryInterface(child, &IID_IDirectXFileDataReference, (void **)&reference);
-                    if (SUCCEEDED(hr))
+                    else if (SUCCEEDED(IDirectXFileObject_QueryInterface(child,
+                            &IID_IDirectXFileDataReference, (void **)&reference)))
                     {
                         TRACE("Found Data Object Reference\n");
                         IDirectXFileDataReference_Resolve(reference, &data);
                         hr = load_data(iface, data, GUIDs, nb_GUIDs, LoadProc, ArgLP, LoadTextureProc, ArgLTP, frame);
                         IDirectXFileData_Release(data);
                         IDirectXFileDataReference_Release(reference);
-                        continue;
                     }
+                    IDirectXFileObject_Release(child);
                 }
 
                 if (hr != DXFILEERR_NOMOREOBJECTS)




More information about the wine-cvs mailing list