Christian Costa : d3dxof: Release properly all allocated resources.
Alexandre Julliard
julliard at winehq.org
Tue Dec 23 13:41:38 CST 2008
Module: wine
Branch: master
Commit: 29d4ab1316f6b40241b07ac9bfeb075ce0277205
URL: http://source.winehq.org/git/wine.git/?a=commit;h=29d4ab1316f6b40241b07ac9bfeb075ce0277205
Author: Christian Costa <titan.costa at wanadoo.fr>
Date: Tue Dec 23 11:57:32 2008 +0100
d3dxof: Release properly all allocated resources.
---
dlls/d3dxof/d3dxof.c | 16 +++++++++++++---
dlls/d3dxof/d3dxof_private.h | 1 +
2 files changed, 14 insertions(+), 3 deletions(-)
diff --git a/dlls/d3dxof/d3dxof.c b/dlls/d3dxof/d3dxof.c
index 6004ed6..0dc93af 100644
--- a/dlls/d3dxof/d3dxof.c
+++ b/dlls/d3dxof/d3dxof.c
@@ -1538,7 +1538,14 @@ static ULONG WINAPI IDirectXFileDataImpl_Release(IDirectXFileData* iface)
TRACE("(%p/%p): ReleaseRef to %d\n", iface, This, ref);
if (!ref)
+ {
+ if (!This->level)
+ {
+ HeapFree(GetProcessHeap(), 0, This->pdata);
+ HeapFree(GetProcessHeap(), 0, This->pstrings);
+ }
HeapFree(GetProcessHeap(), 0, This);
+ }
return ref;
}
@@ -1902,7 +1909,10 @@ static ULONG WINAPI IDirectXFileEnumObjectImpl_Release(IDirectXFileEnumObject* i
if (!ref)
{
- CloseHandle(This->hFile);
+ if (This->source == DXFILELOAD_FROMFILE)
+ HeapFree(GetProcessHeap(), 0, This->buf.buffer);
+ if (This->hFile != INVALID_HANDLE_VALUE)
+ CloseHandle(This->hFile);
HeapFree(GetProcessHeap(), 0, This);
}
@@ -2258,7 +2268,7 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
hr = DXFILEERR_BADALLOC;
goto error;
}
- This->buf.cur_pdata = This->buf.pdata = pdata;
+ This->buf.cur_pdata = This->buf.pdata = object->pdata = pdata;
pstrings = HeapAlloc(GetProcessHeap(), 0, MAX_STRINGS_BUFFER);
if (!pstrings)
@@ -2267,7 +2277,7 @@ static HRESULT WINAPI IDirectXFileEnumObjectImpl_GetNextDataObject(IDirectXFileE
hr = DXFILEERR_BADALLOC;
goto error;
}
- This->buf.cur_pstrings = This->buf.pstrings = pstrings;
+ This->buf.cur_pstrings = This->buf.pstrings = object->pstrings = pstrings;
if (!parse_object(&This->buf))
{
diff --git a/dlls/d3dxof/d3dxof_private.h b/dlls/d3dxof/d3dxof_private.h
index d7cd9c8..58b0416 100644
--- a/dlls/d3dxof/d3dxof_private.h
+++ b/dlls/d3dxof/d3dxof_private.h
@@ -104,6 +104,7 @@ typedef struct {
int cur_enum_object;
BOOL from_ref;
ULONG level;
+ LPBYTE pdata;
LPBYTE pstrings;
} IDirectXFileDataImpl;
More information about the wine-cvs
mailing list