Matteo Bruni : d3dx9: Simplify effect cleanup.

Alexandre Julliard julliard at winehq.org
Thu Mar 21 17:21:20 CDT 2019


Module: wine
Branch: master
Commit: 009279845d9503468d5d3d39e393ad2ffa00181d
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=009279845d9503468d5d3d39e393ad2ffa00181d

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Thu Mar 21 18:27:19 2019 +0100

d3dx9: Simplify effect cleanup.

Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3dx9_36/effect.c | 39 ++++++++++-----------------------------
 1 file changed, 10 insertions(+), 29 deletions(-)

diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index 0c28fae..d89c5d7 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -677,11 +677,11 @@ static void free_technique(struct d3dx_technique *technique)
     technique->name = NULL;
 }
 
-static void d3dx9_base_effect_cleanup(struct d3dx_effect *effect)
+static void d3dx_effect_cleanup(struct d3dx_effect *effect)
 {
     unsigned int i;
 
-    TRACE("Effect %p.\n", effect);
+    TRACE("effect %p.\n", effect);
 
     heap_free(effect->full_name_tmp);
 
@@ -690,7 +690,6 @@ static void d3dx9_base_effect_cleanup(struct d3dx_effect *effect)
         for (i = 0; i < effect->parameter_count; ++i)
             free_top_level_parameter(&effect->parameters[i]);
         heap_free(effect->parameters);
-        effect->parameters = NULL;
     }
 
     if (effect->techniques)
@@ -698,37 +697,23 @@ static void d3dx9_base_effect_cleanup(struct d3dx_effect *effect)
         for (i = 0; i < effect->technique_count; ++i)
             free_technique(&effect->techniques[i]);
         heap_free(effect->techniques);
-        effect->techniques = NULL;
     }
 
     if (effect->objects)
     {
         for (i = 0; i < effect->object_count; ++i)
-        {
             free_object(&effect->objects[i]);
-        }
         heap_free(effect->objects);
-        effect->objects = NULL;
     }
-}
-
-static void free_effect(struct d3dx_effect *effect)
-{
-    TRACE("Free effect %p\n", effect);
-
-    d3dx9_base_effect_cleanup(effect);
 
     if (effect->pool)
-    {
         effect->pool->lpVtbl->Release(effect->pool);
-    }
 
     if (effect->manager)
-    {
         IUnknown_Release(effect->manager);
-    }
 
     IDirect3DDevice9_Release(effect->device);
+    heap_free(effect);
 }
 
 static void get_vector(struct d3dx_parameter *param, D3DXVECTOR4 *vector)
@@ -1822,18 +1807,15 @@ static ULONG WINAPI d3dx_effect_AddRef(ID3DXEffect *iface)
 
 static ULONG WINAPI d3dx_effect_Release(ID3DXEffect *iface)
 {
-    struct d3dx_effect *This = impl_from_ID3DXEffect(iface);
-    ULONG ref = InterlockedDecrement(&This->ref);
+    struct d3dx_effect *effect = impl_from_ID3DXEffect(iface);
+    ULONG refcount = InterlockedDecrement(&effect->ref);
 
-    TRACE("(%p)->(): Release from %u\n", This, ref + 1);
+    TRACE("%p decreasing refcount to %u.\n", effect, refcount);
 
-    if (!ref)
-    {
-        free_effect(This);
-        HeapFree(GetProcessHeap(), 0, This);
-    }
+    if (!refcount)
+        d3dx_effect_cleanup(effect);
 
-    return ref;
+    return refcount;
 }
 
 /*** ID3DXBaseEffect methods ***/
@@ -6330,7 +6312,6 @@ static HRESULT d3dx9_effect_init(struct d3dx_effect *effect, struct IDirect3DDev
             error_messages, pool_impl, skip_constants)))
     {
         FIXME("Failed to parse effect, hr %#x.\n", hr);
-        free_effect(effect);
         return hr;
     }
 
@@ -6378,7 +6359,7 @@ HRESULT WINAPI D3DXCreateEffectEx(struct IDirect3DDevice9 *device, const void *s
     if (FAILED(hr))
     {
         WARN("Failed to create effect object.\n");
-        HeapFree(GetProcessHeap(), 0, object);
+        d3dx_effect_cleanup(object);
         return hr;
     }
 




More information about the wine-cvs mailing list