[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