Signed-off-by: Zebediah Figura z.figura12@gmail.com --- 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 269fa271c6..bb0f162e18 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,