Thomas Faber : quartz: Destroy BaseFilter after child class.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jul 22 14:12:21 CDT 2014


Module: wine
Branch: master
Commit: 5ce8c7a5a794cc86297fda637596140e9bb10e52
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5ce8c7a5a794cc86297fda637596140e9bb10e52

Author: Thomas Faber <thomas.faber at reactos.org>
Date:   Sat Jul 19 10:29:54 2014 +0200

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 a0af3a4..96d83a1 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 16a24ac..7befc46 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 f702c62..b57bae4 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);
 




More information about the wine-cvs mailing list