From 6530824ab31bf9af311f3f93e2d145b81f85de9c Mon Sep 17 00:00:00 2001 From: Jactry Zeng Date: Tue, 7 Feb 2017 22:20:29 +0800 Subject: [PATCH] qcap: Avoid call LeaveCriticalSection() repeatedly. Signed-off-by: Jactry Zeng Signed-off-by: Andrew Eikum Signed-off-by: Alexandre Julliard --- dlls/qcap/v4l.c | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/dlls/qcap/v4l.c b/dlls/qcap/v4l.c index 54e02307846..bc760bdee40 100644 --- a/dlls/qcap/v4l.c +++ b/dlls/qcap/v4l.c @@ -604,7 +604,12 @@ static DWORD WINAPI ReadThread(LPVOID lParam) hr = V4l_Prepare(capBox); if (FAILED(hr)) - goto fail; + { + ERR("Stop IFilterGraph: %x\n", hr); + capBox->thread = 0; + capBox->stopped = TRUE; + return 0; + } pOutput = CoTaskMemAlloc(capBox->width * capBox->height * capBox->bitDepth / 8); capBox->curframe = 0; @@ -641,27 +646,19 @@ static DWORD WINAPI ReadThread(LPVOID lParam) IMediaSample_Release(pSample); V4l_FreeFrame(capBox); } - LeaveCriticalSection(&capBox->CritSect); if (FAILED(hr) && hr != VFW_E_NOT_CONNECTED) { - ERR("Received error: %x\n", hr); - goto cfail; + TRACE("Return %x, stop IFilterGraph\n", hr); + V4l_Unprepare(capBox); + capBox->thread = 0; + capBox->stopped = TRUE; + break; } + LeaveCriticalSection(&capBox->CritSect); } + LeaveCriticalSection(&capBox->CritSect); CoTaskMemFree(pOutput); - - return 0; - -cfail: - CoTaskMemFree(pOutput); - V4l_Unprepare(capBox); - LeaveCriticalSection(&capBox->CritSect); - -fail: - capBox->thread = 0; - capBox->stopped = TRUE; - FIXME("Stop IFilterGraph\n"); return 0; }