From 93a749c44974aa901041f12d241a6ac833c6f014 Mon Sep 17 00:00:00 2001 From: David Rosca Date: Fri, 30 Aug 2024 13:15:44 +0200 Subject: [PATCH] frontends/va: Fix locking in vlVaQueryVideoProcPipelineCaps The mutex needs to be locked before accessing the handle table. Cc: mesa-stable Reviewed-By: Sil Vilerino Part-of: --- src/gallium/frontends/va/surface.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/gallium/frontends/va/surface.c b/src/gallium/frontends/va/surface.c index b2941ee8bc7..20b97ffe919 100644 --- a/src/gallium/frontends/va/surface.c +++ b/src/gallium/frontends/va/surface.c @@ -1559,12 +1559,17 @@ vlVaQueryVideoProcPipelineCaps(VADriverContextP ctx, VAContextID context, if (pipe_blend_modes & PIPE_VIDEO_VPP_BLEND_MODE_GLOBAL_ALPHA) pipeline_cap->blend_flags |= VA_BLEND_GLOBAL_ALPHA; + vlVaDriver *drv = VL_VA_DRIVER(ctx); + + mtx_lock(&drv->mutex); for (i = 0; i < num_filters; i++) { - vlVaBuffer *buf = handle_table_get(VL_VA_DRIVER(ctx)->htab, filters[i]); + vlVaBuffer *buf = handle_table_get(drv->htab, filters[i]); VAProcFilterParameterBufferBase *filter; - if (!buf || buf->type != VAProcFilterParameterBufferType) + if (!buf || buf->type != VAProcFilterParameterBufferType) { + mtx_unlock(&drv->mutex); return VA_STATUS_ERROR_INVALID_BUFFER; + } filter = buf->data; switch (filter->type) { @@ -1577,9 +1582,11 @@ vlVaQueryVideoProcPipelineCaps(VADriverContextP ctx, VAContextID context, break; } default: + mtx_unlock(&drv->mutex); return VA_STATUS_ERROR_UNIMPLEMENTED; } } + mtx_unlock(&drv->mutex); return VA_STATUS_SUCCESS; }