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