diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index bdb60793cb0..b5fa40bc3b3 100644 --- a/dlls/quartz/dsoundrender.c +++ b/dlls/quartz/dsoundrender.c @@ -398,6 +398,8 @@ static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface) if (!refCount) { + IPin *pConnectedTo; + This->csFilter.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&This->csFilter); if (This->pClock) @@ -410,6 +412,13 @@ static ULONG WINAPI DSoundRender_Release(IBaseFilter * iface) IDirectSound_Release(This->dsound); This->dsound = NULL; + if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[0], &pConnectedTo))) + { + IPin_Disconnect(pConnectedTo); + IPin_Release(pConnectedTo); + } + IPin_Disconnect(This->ppPins[0]); + IPin_Release(This->ppPins[0]); CoTaskMemFree(This->ppPins); diff --git a/dlls/quartz/parser.c b/dlls/quartz/parser.c index 1da0b6debc1..fb8c0856679 100644 --- a/dlls/quartz/parser.c +++ b/dlls/quartz/parser.c @@ -193,7 +193,18 @@ static ULONG WINAPI Parser_Release(IBaseFilter * iface) IReferenceClock_Release(This->pClock); for (i = 0; i < This->cStreams + 1; i++) + { + IPin *pConnectedTo; + + if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[i], &pConnectedTo))) + { + IPin_Disconnect(pConnectedTo); + IPin_Release(pConnectedTo); + } + IPin_Disconnect(This->ppPins[i]); + IPin_Release(This->ppPins[i]); + } CoTaskMemFree(This->ppPins); This->lpVtbl = NULL; diff --git a/dlls/quartz/transform.c b/dlls/quartz/transform.c index 22cb2bfb331..04366ef142f 100644 --- a/dlls/quartz/transform.c +++ b/dlls/quartz/transform.c @@ -283,7 +283,18 @@ static ULONG WINAPI TransformFilter_Release(IBaseFilter * iface) IReferenceClock_Release(This->pClock); for (i = 0; i < 2; i++) + { + IPin *pConnectedTo; + + if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[i], &pConnectedTo))) + { + IPin_Disconnect(pConnectedTo); + IPin_Release(pConnectedTo); + } + IPin_Disconnect(This->ppPins[i]); + IPin_Release(This->ppPins[i]); + } CoTaskMemFree(This->ppPins); This->lpVtbl = NULL; diff --git a/dlls/quartz/videorenderer.c b/dlls/quartz/videorenderer.c index 695258d18a2..ccfa61a6ed6 100644 --- a/dlls/quartz/videorenderer.c +++ b/dlls/quartz/videorenderer.c @@ -522,6 +522,8 @@ static ULONG WINAPI VideoRenderer_Release(IBaseFilter * iface) if (!refCount) { + IPin *pConnectedTo; + This->csFilter.DebugInfo->Spare[0] = 0; DeleteCriticalSection(&This->csFilter); @@ -533,6 +535,13 @@ static ULONG WINAPI VideoRenderer_Release(IBaseFilter * iface) if (This->pClock) IReferenceClock_Release(This->pClock); + if (SUCCEEDED(IPin_ConnectedTo(This->ppPins[0], &pConnectedTo))) + { + IPin_Disconnect(pConnectedTo); + IPin_Release(pConnectedTo); + } + IPin_Disconnect(This->ppPins[0]); + IPin_Release(This->ppPins[0]); CoTaskMemFree(This->ppPins);