Module: wine Branch: master Commit: 29d4ab1316f6b40241b07ac9bfeb075ce0277205 URL: http://source.winehq.org/git/wine.git/?a=commit;h=29d4ab1316f6b40241b07ac9bf...
Author: Christian Costa titan.costa@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;