Zebediah Figura : quartz/filesource: Use BaseFilterImpl_Release().

Alexandre Julliard julliard at winehq.org
Fri May 24 15:46:35 CDT 2019


Module: wine
Branch: master
Commit: b9735fc69e89706f8f9733e8be4b5016053ac2ae
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b9735fc69e89706f8f9733e8be4b5016053ac2ae

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Thu May 23 17:06:34 2019 -0500

quartz/filesource: Use BaseFilterImpl_Release().

Signed-off-by: Zebediah Figura <z.figura12 at gmail.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/quartz/filesource.c | 59 +++++++++++++++++++++---------------------------
 1 file changed, 26 insertions(+), 33 deletions(-)

diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c
index 269fa27..bb0f162 100644
--- a/dlls/quartz/filesource.c
+++ b/dlls/quartz/filesource.c
@@ -403,8 +403,32 @@ static IPin *async_reader_get_pin(BaseFilter *iface, unsigned int index)
     return This->pOutputPin;
 }
 
-static const BaseFilterFuncTable BaseFuncTable = {
+static void async_reader_destroy(BaseFilter *iface)
+{
+    AsyncReader *filter = impl_from_BaseFilter(iface);
+
+    if (filter->pOutputPin)
+    {
+        IPin *peer;
+        if (SUCCEEDED(IPin_ConnectedTo(filter->pOutputPin, &peer)))
+        {
+            IPin_Disconnect(peer);
+            IPin_Release(peer);
+        }
+        IPin_Disconnect(filter->pOutputPin);
+        IPin_Release(filter->pOutputPin);
+    }
+    CoTaskMemFree(filter->pszFileName);
+    if (filter->pmt)
+        DeleteMediaType(filter->pmt);
+    strmbase_filter_cleanup(&filter->filter);
+    CoTaskMemFree(filter);
+}
+
+static const BaseFilterFuncTable BaseFuncTable =
+{
     .filter_get_pin = async_reader_get_pin,
+    .filter_destroy = async_reader_destroy,
 };
 
 HRESULT AsyncReader_create(IUnknown * pUnkOuter, LPVOID * ppv)
@@ -468,37 +492,6 @@ static HRESULT WINAPI AsyncReader_QueryInterface(IBaseFilter * iface, REFIID rii
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface)
-{
-    AsyncReader *This = impl_from_IBaseFilter(iface);
-    ULONG refCount = InterlockedDecrement(&This->filter.refCount);
-    
-    TRACE("%p->() Release from %d\n", This, refCount + 1);
-    
-    if (!refCount)
-    {
-        if (This->pOutputPin)
-        {
-            IPin *pConnectedTo;
-            if(SUCCEEDED(IPin_ConnectedTo(This->pOutputPin, &pConnectedTo)))
-            {
-                IPin_Disconnect(pConnectedTo);
-                IPin_Release(pConnectedTo);
-            }
-            IPin_Disconnect(This->pOutputPin);
-            IPin_Release(This->pOutputPin);
-        }
-        CoTaskMemFree(This->pszFileName);
-        if (This->pmt)
-            DeleteMediaType(This->pmt);
-        strmbase_filter_cleanup(&This->filter);
-        CoTaskMemFree(This);
-        return 0;
-    }
-    else
-        return refCount;
-}
-
 /** IMediaFilter methods **/
 
 static HRESULT WINAPI AsyncReader_Stop(IBaseFilter * iface)
@@ -538,7 +531,7 @@ static const IBaseFilterVtbl AsyncReader_Vtbl =
 {
     AsyncReader_QueryInterface,
     BaseFilterImpl_AddRef,
-    AsyncReader_Release,
+    BaseFilterImpl_Release,
     BaseFilterImpl_GetClassID,
     AsyncReader_Stop,
     AsyncReader_Pause,




More information about the wine-cvs mailing list