[Mesa-dev] [PATCH 2/2] va: call texture_get_handle while the mutex is being held

Marek Olšák maraeo at gmail.com
Wed Jan 4 10:47:56 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

The context may be used by texture_get_handle.
---
 src/gallium/state_trackers/va/buffer.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/va/buffer.c b/src/gallium/state_trackers/va/buffer.c
index 3c9b9d1..93f012c 100644
--- a/src/gallium/state_trackers/va/buffer.c
+++ b/src/gallium/state_trackers/va/buffer.c
@@ -290,29 +290,32 @@ vlVaAcquireBufferHandle(VADriverContextP ctx, VABufferID buf_id,
          return VA_STATUS_ERROR_INVALID_PARAMETER;
    } else {
       VABufferInfo * const buf_info = &buf->export_state;
 
       switch (mem_type) {
       case VA_SURFACE_ATTRIB_MEM_TYPE_DRM_PRIME: {
          struct winsys_handle whandle;
 
          pipe_mutex_lock(drv->mutex);
          drv->pipe->flush(drv->pipe, NULL, 0);
-         pipe_mutex_unlock(drv->mutex);
 
          memset(&whandle, 0, sizeof(whandle));
          whandle.type = DRM_API_HANDLE_TYPE_FD;
 
          if (!screen->resource_get_handle(screen, drv->pipe,
                                           buf->derived_surface.resource,
-                                          &whandle, PIPE_HANDLE_USAGE_READ_WRITE))
+                                          &whandle, PIPE_HANDLE_USAGE_READ_WRITE)) {
+            pipe_mutex_unlock(drv->mutex);
             return VA_STATUS_ERROR_INVALID_BUFFER;
+         }
+
+         pipe_mutex_unlock(drv->mutex);
 
          buf_info->handle = (intptr_t)whandle.handle;
          break;
       }
       default:
          return VA_STATUS_ERROR_UNSUPPORTED_MEMORY_TYPE;
       }
 
       buf_info->type = buf->type;
       buf_info->mem_type = mem_type;
-- 
2.7.4



More information about the mesa-dev mailing list