Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qcap/vfwcapture.c | 2 +- dlls/quartz/filesource.c | 2 +- dlls/quartz/parser.c | 2 +- dlls/strmbase/filter.c | 4 ++-- dlls/strmbase/renderer.c | 2 +- dlls/strmbase/transform.c | 2 +- dlls/winegstreamer/gstdemux.c | 2 +- dlls/wineqtdecoder/qtsplitter.c | 2 +- include/wine/strmbase.h | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/dlls/qcap/vfwcapture.c b/dlls/qcap/vfwcapture.c index 0139dbca88..feb9c08e85 100644 --- a/dlls/qcap/vfwcapture.c +++ b/dlls/qcap/vfwcapture.c @@ -177,7 +177,7 @@ static ULONG WINAPI unknown_inner_Release(IUnknown *iface) IPin_Release(conn); } IPin_Release(This->pOutputPin); - BaseFilter_Destroy(&This->filter); + strmbase_filter_cleanup(&This->filter); CoTaskMemFree(This); ObjectRefCount(FALSE); } diff --git a/dlls/quartz/filesource.c b/dlls/quartz/filesource.c index b4afae92ed..a331d3359a 100644 --- a/dlls/quartz/filesource.c +++ b/dlls/quartz/filesource.c @@ -493,7 +493,7 @@ static ULONG WINAPI AsyncReader_Release(IBaseFilter * iface) CoTaskMemFree(This->pszFileName); if (This->pmt) DeleteMediaType(This->pmt); - BaseFilter_Destroy(&This->filter); + strmbase_filter_cleanup(&This->filter); CoTaskMemFree(This); return 0; } diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c index a8917d99ec..9798ea71a2 100644 --- a/dlls/quartz/parser.c +++ b/dlls/quartz/parser.c @@ -193,7 +193,7 @@ void Parser_Destroy(ParserImpl *This) }
CoTaskMemFree(This->ppPins); - BaseFilter_Destroy(&This->filter); + strmbase_filter_cleanup(&This->filter);
TRACE("Destroying parser\n"); CoTaskMemFree(This); diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c index 3a39ec4e06..325620e8de 100644 --- a/dlls/strmbase/filter.c +++ b/dlls/strmbase/filter.c @@ -62,7 +62,7 @@ ULONG WINAPI BaseFilterImpl_Release(IBaseFilter * iface) TRACE("(%p)->() Release from %d\n", This, refCount + 1);
if (!refCount) - BaseFilter_Destroy(This); + strmbase_filter_cleanup(This);
return refCount; } @@ -227,7 +227,7 @@ void BaseFilter_Init(BaseFilter *This, const IBaseFilterVtbl *Vtbl, const CLSID This->pFuncsTable = pBaseFuncsTable; }
-HRESULT WINAPI BaseFilter_Destroy(BaseFilter * This) +HRESULT WINAPI strmbase_filter_cleanup(BaseFilter * This) { if (This->pClock) IReferenceClock_Release(This->pClock); diff --git a/dlls/strmbase/renderer.c b/dlls/strmbase/renderer.c index d263b208eb..c6c7978235 100644 --- a/dlls/strmbase/renderer.c +++ b/dlls/strmbase/renderer.c @@ -298,7 +298,7 @@ void strmbase_renderer_cleanup(BaseRenderer *filter) CloseHandle(filter->ThreadSignal); CloseHandle(filter->RenderEvent); QualityControlImpl_Destroy(filter->qcimpl); - BaseFilter_Destroy(&filter->filter); + strmbase_filter_cleanup(&filter->filter); }
HRESULT WINAPI BaseRendererImpl_Receive(BaseRenderer *This, IMediaSample * pSample) diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c index 9cb18b2c3e..8b63d2d5aa 100644 --- a/dlls/strmbase/transform.c +++ b/dlls/strmbase/transform.c @@ -194,7 +194,7 @@ static ULONG WINAPI TransformFilterImpl_Release(IBaseFilter * iface) FreeMediaType(&This->pmt); QualityControlImpl_Destroy(This->qcimpl); IUnknown_Release(This->seekthru_unk); - BaseFilter_Destroy(&This->filter); + strmbase_filter_cleanup(&This->filter); CoTaskMemFree(This); } return refCount; diff --git a/dlls/winegstreamer/gstdemux.c b/dlls/winegstreamer/gstdemux.c index 8e9278dca9..3653f647c4 100644 --- a/dlls/winegstreamer/gstdemux.c +++ b/dlls/winegstreamer/gstdemux.c @@ -1298,7 +1298,7 @@ static void GST_Destroy(GSTImpl *This) gst_bus_set_sync_handler(This->bus, NULL, NULL, NULL); gst_object_unref(This->bus); } - BaseFilter_Destroy(&This->filter); + strmbase_filter_cleanup(&This->filter); CoTaskMemFree(This); }
diff --git a/dlls/wineqtdecoder/qtsplitter.c b/dlls/wineqtdecoder/qtsplitter.c index 19042ed5d1..651a4a8c6b 100644 --- a/dlls/wineqtdecoder/qtsplitter.c +++ b/dlls/wineqtdecoder/qtsplitter.c @@ -337,7 +337,7 @@ static void QT_Destroy(QTSplitter *This)
This->csReceive.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&This->csReceive); - BaseFilter_Destroy(&This->filter); + strmbase_filter_cleanup(&This->filter);
CoTaskMemFree(This); } diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index 18336c037d..d51fdb47c7 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -192,7 +192,7 @@ VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter* This);
void BaseFilter_Init(BaseFilter *filter, const IBaseFilterVtbl *vtbl, const CLSID *clsid, DWORD_PTR debug_info, const BaseFilterFuncTable *func_table); -HRESULT WINAPI BaseFilter_Destroy(BaseFilter * This); +HRESULT WINAPI strmbase_filter_cleanup(BaseFilter *filter);
/* Enums */ HRESULT WINAPI EnumMediaTypes_Construct(BasePin *iface, BasePin_GetMediaType enumFunc, BasePin_GetMediaTypeVersion versionFunc, IEnumMediaTypes ** ppEnum);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/filter.c | 4 +--- include/wine/strmbase.h | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/dlls/strmbase/filter.c b/dlls/strmbase/filter.c index 325620e8de..8bec368c15 100644 --- a/dlls/strmbase/filter.c +++ b/dlls/strmbase/filter.c @@ -227,7 +227,7 @@ void BaseFilter_Init(BaseFilter *This, const IBaseFilterVtbl *Vtbl, const CLSID This->pFuncsTable = pBaseFuncsTable; }
-HRESULT WINAPI strmbase_filter_cleanup(BaseFilter * This) +void strmbase_filter_cleanup(BaseFilter *This) { if (This->pClock) IReferenceClock_Release(This->pClock); @@ -235,6 +235,4 @@ HRESULT WINAPI strmbase_filter_cleanup(BaseFilter * This) This->IBaseFilter_iface.lpVtbl = NULL; This->csFilter.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&This->csFilter); - - return S_OK; } diff --git a/include/wine/strmbase.h b/include/wine/strmbase.h index d51fdb47c7..2f150e8c48 100644 --- a/include/wine/strmbase.h +++ b/include/wine/strmbase.h @@ -192,7 +192,7 @@ VOID WINAPI BaseFilterImpl_IncrementPinVersion(BaseFilter* This);
void BaseFilter_Init(BaseFilter *filter, const IBaseFilterVtbl *vtbl, const CLSID *clsid, DWORD_PTR debug_info, const BaseFilterFuncTable *func_table); -HRESULT WINAPI strmbase_filter_cleanup(BaseFilter *filter); +void strmbase_filter_cleanup(BaseFilter *filter);
/* Enums */ HRESULT WINAPI EnumMediaTypes_Construct(BasePin *iface, BasePin_GetMediaType enumFunc, BasePin_GetMediaTypeVersion versionFunc, IEnumMediaTypes ** ppEnum);
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/evr/evr.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/dlls/evr/evr.c b/dlls/evr/evr.c index 5ab6572e50..01e4ee4598 100644 --- a/dlls/evr/evr.c +++ b/dlls/evr/evr.c @@ -117,12 +117,15 @@ static ULONG WINAPI inner_AddRef(IUnknown *iface) static ULONG WINAPI inner_Release(IUnknown *iface) { evr_filter *This = impl_from_inner_IUnknown(iface); - ULONG ref = BaseFilterImpl_Release(&This->filter.IBaseFilter_iface); + ULONG ref = InterlockedDecrement(&This->filter.refCount);
TRACE("(%p, %p)->(): new ref %d\n", iface, This, ref);
if (!ref) + { + strmbase_filter_cleanup(&This->filter); CoTaskMemFree(This); + }
return ref; }
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/strmbase/transform.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/dlls/strmbase/transform.c b/dlls/strmbase/transform.c index 8b63d2d5aa..b8eb60ce2e 100644 --- a/dlls/strmbase/transform.c +++ b/dlls/strmbase/transform.c @@ -352,7 +352,7 @@ static HRESULT strmbase_transform_init(const CLSID *clsid, if (FAILED(hr)) { CoTaskMemFree(filter->ppPins); - BaseFilterImpl_Release(&filter->filter.IBaseFilter_iface); + strmbase_filter_cleanup(&filter->filter); }
return hr;
Signed-off-by: Zebediah Figura z.figura12@gmail.com --- dlls/qcap/avimux.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/qcap/avimux.c b/dlls/qcap/avimux.c index 3a269a3259..ff45fb0112 100644 --- a/dlls/qcap/avimux.c +++ b/dlls/qcap/avimux.c @@ -175,7 +175,7 @@ static HRESULT WINAPI AviMux_QueryInterface(IBaseFilter *iface, REFIID riid, voi static ULONG WINAPI AviMux_Release(IBaseFilter *iface) { AviMux *This = impl_from_IBaseFilter(iface); - ULONG ref = BaseFilterImpl_Release(iface); + ULONG ref = InterlockedDecrement(&This->filter.refCount);
TRACE("(%p) new refcount: %u\n", This, ref);
@@ -192,6 +192,7 @@ static ULONG WINAPI AviMux_Release(IBaseFilter *iface) }
HeapFree(GetProcessHeap(), 0, This->idx1); + strmbase_filter_cleanup(&This->filter); HeapFree(GetProcessHeap(), 0, This); ObjectRefCount(FALSE); } @@ -2364,7 +2365,7 @@ IUnknown* WINAPI QCAP_createAVIMux(IUnknown *pUnkOuter, HRESULT *phr) hr = BaseOutputPin_Construct(&AviMuxOut_PinVtbl, sizeof(AviMuxOut), &info, &AviMuxOut_BaseOutputFuncTable, &avimux->filter.csFilter, (IPin**)&avimux->out); if(FAILED(hr)) { - BaseFilterImpl_Release(&avimux->filter.IBaseFilter_iface); + strmbase_filter_cleanup(&avimux->filter); HeapFree(GetProcessHeap(), 0, avimux); *phr = hr; return NULL; @@ -2377,7 +2378,7 @@ IUnknown* WINAPI QCAP_createAVIMux(IUnknown *pUnkOuter, HRESULT *phr) hr = create_input_pin(avimux); if(FAILED(hr)) { BaseOutputPinImpl_Release(&avimux->out->pin.pin.IPin_iface); - BaseFilterImpl_Release(&avimux->filter.IBaseFilter_iface); + strmbase_filter_cleanup(&avimux->filter); HeapFree(GetProcessHeap(), 0, avimux); *phr = hr; return NULL;