Zebediah Figura : winegstreamer/gstdemux: Use BaseFilterImpl_Release().

Alexandre Julliard julliard at winehq.org
Mon May 27 14:50:19 CDT 2019


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

Author: Zebediah Figura <z.figura12 at gmail.com>
Date:   Sat May 25 15:21:24 2019 -0500

winegstreamer/gstdemux: Use BaseFilterImpl_Release().

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

---

 dlls/winegstreamer/gstdemux.c | 92 +++++++++++++++++++------------------------
 1 file changed, 41 insertions(+), 51 deletions(-)

diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c
index 6d3d2a0..64b8dcf 100644
--- a/dlls/winegstreamer/gstdemux.c
+++ b/dlls/winegstreamer/gstdemux.c
@@ -1213,8 +1213,48 @@ static IPin *gstdemux_get_pin(BaseFilter *base, unsigned int index)
     return pin;
 }
 
+static void gstdemux_destroy(BaseFilter *iface)
+{
+    GSTImpl *filter = impl_from_IBaseFilter(&iface->IBaseFilter_iface);
+    IPin *connected = NULL;
+    ULONG pinref;
+    HRESULT hr;
+
+    CloseHandle(filter->no_more_pads_event);
+    CloseHandle(filter->push_event);
+
+    /* Don't need to clean up output pins, disconnecting input pin will do that */
+    IPin_ConnectedTo((IPin *)&filter->pInputPin, &connected);
+    if (connected)
+    {
+        hr = IPin_Disconnect(connected);
+        assert(hr == S_OK);
+        IPin_Release(connected);
+        hr = IPin_Disconnect(&filter->pInputPin.pin.IPin_iface);
+        assert(hr == S_OK);
+    }
+    pinref = IPin_Release(&filter->pInputPin.pin.IPin_iface);
+    if (pinref)
+    {
+        /* Valgrind could find this, if I kill it here */
+        ERR("pinref should be null, is %u, destroying anyway\n", pinref);
+        assert((LONG)pinref > 0);
+
+        while (pinref)
+            pinref = IPin_Release(&filter->pInputPin.pin.IPin_iface);
+    }
+    if (filter->bus)
+    {
+        gst_bus_set_sync_handler(filter->bus, NULL, NULL, NULL);
+        gst_object_unref(filter->bus);
+    }
+    strmbase_filter_cleanup(&filter->filter);
+    CoTaskMemFree(filter);
+}
+
 static const BaseFilterFuncTable BaseFuncTable = {
     .filter_get_pin = gstdemux_get_pin,
+    .filter_destroy = gstdemux_destroy,
 };
 
 IUnknown * CALLBACK Gstreamer_Splitter_create(IUnknown *pUnkOuter, HRESULT *phr)
@@ -1267,43 +1307,6 @@ IUnknown * CALLBACK Gstreamer_Splitter_create(IUnknown *pUnkOuter, HRESULT *phr)
     return obj;
 }
 
-static void GST_Destroy(GSTImpl *This)
-{
-    IPin *connected = NULL;
-    ULONG pinref;
-    HRESULT hr;
-
-    TRACE("Destroying %p\n", This);
-
-    CloseHandle(This->no_more_pads_event);
-    CloseHandle(This->push_event);
-
-    /* Don't need to clean up output pins, disconnecting input pin will do that */
-    IPin_ConnectedTo((IPin *)&This->pInputPin, &connected);
-    if (connected) {
-        hr = IPin_Disconnect(connected);
-        assert(hr == S_OK);
-        IPin_Release(connected);
-        hr = IPin_Disconnect(&This->pInputPin.pin.IPin_iface);
-        assert(hr == S_OK);
-    }
-    pinref = IPin_Release(&This->pInputPin.pin.IPin_iface);
-    if (pinref) {
-        /* Valgrind could find this, if I kill it here */
-        ERR("pinref should be null, is %u, destroying anyway\n", pinref);
-        assert((LONG)pinref > 0);
-
-        while (pinref)
-            pinref = IPin_Release(&This->pInputPin.pin.IPin_iface);
-    }
-    if (This->bus) {
-        gst_bus_set_sync_handler(This->bus, NULL, NULL, NULL);
-        gst_object_unref(This->bus);
-    }
-    strmbase_filter_cleanup(&This->filter);
-    CoTaskMemFree(This);
-}
-
 static HRESULT WINAPI GST_QueryInterface(IBaseFilter *iface, REFIID riid, LPVOID *ppv)
 {
     GSTImpl *This = impl_from_IBaseFilter(iface);
@@ -1332,19 +1335,6 @@ static HRESULT WINAPI GST_QueryInterface(IBaseFilter *iface, REFIID riid, LPVOID
     return E_NOINTERFACE;
 }
 
-static ULONG WINAPI GST_Release(IBaseFilter *iface)
-{
-    GSTImpl *This = impl_from_IBaseFilter(iface);
-    ULONG refCount = InterlockedDecrement(&This->filter.refCount);
-
-    TRACE("(%p)->() Release from %d\n", This, refCount + 1);
-
-    if (!refCount)
-        GST_Destroy(This);
-
-    return refCount;
-}
-
 static HRESULT WINAPI GST_Stop(IBaseFilter *iface)
 {
     GSTImpl *This = impl_from_IBaseFilter(iface);
@@ -1468,7 +1458,7 @@ static HRESULT WINAPI GST_GetState(IBaseFilter *iface, DWORD dwMilliSecsTimeout,
 static const IBaseFilterVtbl GST_Vtbl = {
     GST_QueryInterface,
     BaseFilterImpl_AddRef,
-    GST_Release,
+    BaseFilterImpl_Release,
     BaseFilterImpl_GetClassID,
     GST_Stop,
     GST_Pause,




More information about the wine-cvs mailing list