From 46bad3bc2a5491e1fb5f6932db4fa5a2a6f81d78 Mon Sep 17 00:00:00 2001 From: Maarten Lankhorst Date: Fri, 4 Jul 2008 16:59:22 -0700 Subject: [PATCH] quartz: Fix deadlock with transform filter implementations --- dlls/quartz/acmwrapper.c | 2 ++ dlls/quartz/avidec.c | 4 +++- 2 files changed, 5 insertions(+), 1 deletions(-) diff --git a/dlls/quartz/acmwrapper.c b/dlls/quartz/acmwrapper.c index d877930..22bfb87 100644 --- a/dlls/quartz/acmwrapper.c +++ b/dlls/quartz/acmwrapper.c @@ -186,7 +186,9 @@ static HRESULT ACMWrapper_ProcessSampleData(TransformFilterImpl* pTransformFilte } TRACE("Sample stop time: %u.%03u\n", (DWORD)(tStart/10000000), (DWORD)((tStart/10000)%1000)); + LeaveCriticalSection(&This->tf.csFilter); hr = OutputPin_SendSample((OutputPin*)This->tf.ppPins[1], pOutSample); + EnterCriticalSection(&This->tf.csFilter); if (hr != S_OK && hr != VFW_E_NOT_CONNECTED) { if (FAILED(hr)) diff --git a/dlls/quartz/avidec.c b/dlls/quartz/avidec.c index 79fd4d8..47339f8 100644 --- a/dlls/quartz/avidec.c +++ b/dlls/quartz/avidec.c @@ -137,10 +137,12 @@ static HRESULT AVIDec_ProcessSampleData(TransformFilterImpl* pTransformFilter, I else IMediaSample_SetTime(pOutSample, NULL, NULL); + LeaveCriticalSection(&This->tf.csFilter); hr = OutputPin_SendSample((OutputPin*)This->tf.ppPins[1], pOutSample); + EnterCriticalSection(&This->tf.csFilter); if (hr != S_OK && hr != VFW_E_NOT_CONNECTED) { ERR("Error sending sample (%x)\n", hr); - goto error; + goto error; } error: -- 1.5.4.1