i965/sync: Fix uninitalized usage and leak of mutex
We locked an unitialized mutex in the callstack
glClientWaitSync
intel_gl_client_wait_sync
brw_fence_client_wait_sync
because we forgot to initialize it in intel_gl_fence_sync.
(The EGLSync codepath didn't have this bug. It initialized the mutex in
intel_dri_create_sync).
We also forgot to tear down (mtx_destroy) the mutex when destroying
the sync object.
Cc: mesa-stable@lists.freedesktop.org
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
@@ -57,11 +57,21 @@ struct intel_gl_sync_object {
|
||||
struct brw_fence fence;
|
||||
};
|
||||
|
||||
static void
|
||||
brw_fence_init(struct brw_context *brw, struct brw_fence *fence)
|
||||
{
|
||||
fence->brw = brw;
|
||||
fence->batch_bo = NULL;
|
||||
mtx_init(&fence->mutex, mtx_plain);
|
||||
}
|
||||
|
||||
static void
|
||||
brw_fence_finish(struct brw_fence *fence)
|
||||
{
|
||||
if (fence->batch_bo)
|
||||
drm_intel_bo_unreference(fence->batch_bo);
|
||||
|
||||
mtx_destroy(&fence->mutex);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -186,6 +196,7 @@ intel_gl_fence_sync(struct gl_context *ctx, struct gl_sync_object *s,
|
||||
struct brw_context *brw = brw_context(ctx);
|
||||
struct intel_gl_sync_object *sync = (struct intel_gl_sync_object *)s;
|
||||
|
||||
brw_fence_init(brw, &sync->fence);
|
||||
brw_fence_insert(brw, &sync->fence);
|
||||
}
|
||||
|
||||
@@ -240,8 +251,7 @@ intel_dri_create_fence(__DRIcontext *ctx)
|
||||
if (!fence)
|
||||
return NULL;
|
||||
|
||||
mtx_init(&fence->mutex, mtx_plain);
|
||||
fence->brw = brw;
|
||||
brw_fence_init(brw, fence);
|
||||
brw_fence_insert(brw, fence);
|
||||
|
||||
return fence;
|
||||
|
||||
Reference in New Issue
Block a user