[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