Chris Robinson : quartz: Force disconnect when a filter is fully released.
Module: wine Branch: master Commit: 809f68420f5332594cd3da60ada4351e34c6a855 URL: http://source.winehq.org/git/wine.git/?a=commit;h=809f68420f5332594cd3da60ad... Author: Chris Robinson <chris.kcat(a)gmail.com> Date: Tue Mar 13 10:47:47 2007 -0700 quartz: Force disconnect when a filter is fully released. --- dlls/quartz/dsoundrender.c | 9 +++++++++ dlls/quartz/parser.c | 11 +++++++++++ dlls/quartz/transform.c | 11 +++++++++++ dlls/quartz/videorenderer.c | 9 +++++++++ 4 files changed, 40 insertions(+), 0 deletions(-) diff --git a/dlls/quartz/dsoundrender.c b/dlls/quartz/dsoundrender.c index bdb6079..b5fa40b 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 1da0b6d..fb8c085 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 22cb2bf..04366ef 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 695258d..ccfa61a 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);
participants (1)
-
Alexandre Julliard