From 5ce8c7a5a794cc86297fda637596140e9bb10e52 Mon Sep 17 00:00:00 2001 From: Thomas Faber Date: Sat, 19 Jul 2014 10:29:54 +0200 Subject: [PATCH] quartz: Destroy BaseFilter after child class. --- dlls/quartz/filesource.c | 3 ++- dlls/quartz/nullrenderer.c | 3 ++- dlls/quartz/parser.c | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c index a0af3a4a50e..96d83a1aed4 100644 --- a/dlls/quartz/filesource.c +++ b/dlls/quartz/filesource.c @@ -480,7 +480,7 @@ static HRESULT WINAPI AsyncReader_QueryInterface(IBaseFilter * iface, REFIID rii static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface) { AsyncReader *This = impl_from_IBaseFilter(iface); - ULONG refCount = BaseFilterImpl_Release(iface); + ULONG refCount = InterlockedDecrement(&This->filter.refCount); TRACE("(%p)->() Release from %d\n", This, refCount + 1); @@ -500,6 +500,7 @@ static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface) CoTaskMemFree(This->pszFileName); if (This->pmt) FreeMediaType(This->pmt); + BaseFilter_Destroy(&This->filter); CoTaskMemFree(This); return 0; } diff --git a/dlls/quartz/nullrenderer.c b/dlls/quartz/nullrenderer.c index 16a24ac7a54..7befc462260 100644 --- a/dlls/quartz/nullrenderer.c +++ b/dlls/quartz/nullrenderer.c @@ -128,11 +128,12 @@ static ULONG WINAPI NullRendererInner_AddRef(IUnknown *iface) static ULONG WINAPI NullRendererInner_Release(IUnknown *iface) { NullRendererImpl *This = impl_from_IUnknown(iface); - ULONG refCount = BaseFilterImpl_Release(&This->renderer.filter.IBaseFilter_iface); + ULONG refCount = InterlockedDecrement(&This->renderer.filter.refCount); if (!refCount) { TRACE("Destroying Null Renderer\n"); + BaseFilter_Destroy(&This->renderer.filter); CoTaskMemFree(This); } diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c index f702c62825d..b57bae4b90a 100644 --- a/dlls/quartz/parser.c +++ b/dlls/quartz/parser.c @@ -194,6 +194,7 @@ void Parser_Destroy(ParserImpl *This) } CoTaskMemFree(This->ppPins); + BaseFilter_Destroy(&This->filter); TRACE("Destroying parser\n"); CoTaskMemFree(This); @@ -202,7 +203,7 @@ void Parser_Destroy(ParserImpl *This) ULONG WINAPI Parser_Release(IBaseFilter * iface) { ParserImpl *This = impl_from_IBaseFilter(iface); - ULONG refCount = BaseFilterImpl_Release(iface); + ULONG refCount = InterlockedDecrement(&This->filter.refCount); TRACE("(%p)->() Release from %d\n", This, refCount + 1); -- 2.11.4.GIT