[PATCH] qcap: Avoid call LeaveCriticalSection() repeatedly.
Andrew Eikum
aeikum at codeweavers.com
Thu Feb 9 08:44:42 CST 2017
Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
On Tue, Feb 07, 2017 at 10:20:29PM +0800, Jactry Zeng wrote:
> Signed-off-by: Jactry Zeng <jzeng at codeweavers.com>
> ---
> 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 54e0230784..bc760bdee4 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");
> + CoTaskMemFree(pOutput);
> return 0;
> }
>
>
>
More information about the wine-patches
mailing list