This code was simply incorrect through and through. It did not protect what actually has to be protected in a multi-threaded setup. Perhaps it was used to silence threading errors?
Either way, remove it, and document the correct way to use execution pools in a threaded environment. --- libavutil/vulkan.c | 12 ------------ libavutil/vulkan.h | 2 ++ 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/libavutil/vulkan.c b/libavutil/vulkan.c index dc30539115..55b039d5ef 100644 --- a/libavutil/vulkan.c +++ b/libavutil/vulkan.c @@ -251,7 +251,6 @@ void ff_vk_exec_pool_free(FFVulkanContext *s, FFVkExecPool *pool) vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE, UINT64_MAX); vk->DestroyFence(s->hwctx->act_dev, e->fence, s->hwctx->alloc); } - pthread_mutex_destroy(&e->lock); ff_vk_exec_discard_deps(s, e); @@ -424,11 +423,6 @@ int ff_vk_exec_pool_init(FFVulkanContext *s, FFVkQueueFamilyCtx *qf, .flags = VK_FENCE_CREATE_SIGNALED_BIT, }; - /* Mutex */ - err = pthread_mutex_init(&e->lock, NULL); - if (err != 0) - return AVERROR(err); - /* Fence */ ret = vk->CreateFence(s->hwctx->act_dev, &fence_create, s->hwctx->alloc, &e->fence); @@ -498,10 +492,8 @@ FFVkExecContext *ff_vk_exec_get(FFVulkanContext *s, FFVkExecPool *pool) void ff_vk_exec_wait(FFVulkanContext *s, FFVkExecContext *e) { FFVulkanFunctions *vk = &s->vkfn; - pthread_mutex_lock(&e->lock); vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE, UINT64_MAX); ff_vk_exec_discard_deps(s, e); - pthread_mutex_unlock(&e->lock); } int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e) @@ -517,11 +509,7 @@ int ff_vk_exec_start(FFVulkanContext *s, FFVkExecContext *e) /* Wait for the fence to be signalled */ vk->WaitForFences(s->hwctx->act_dev, 1, &e->fence, VK_TRUE, UINT64_MAX); - - /* vkResetFences is defined as being host-synchronized */ - pthread_mutex_lock(&e->lock); vk->ResetFences(s->hwctx->act_dev, 1, &e->fence); - pthread_mutex_unlock(&e->lock); /* Discard queue dependencies */ ff_vk_exec_discard_deps(s, e); diff --git a/libavutil/vulkan.h b/libavutil/vulkan.h index ef39f76675..0a166da9eb 100644 --- a/libavutil/vulkan.h +++ b/libavutil/vulkan.h @@ -400,6 +400,8 @@ int ff_vk_qf_init(FFVulkanContext *s, FFVkQueueFamilyCtx *qf, /** * Allocates/frees an execution pool. + * If used in a multi-threaded context, there must be at least as many contexts + * as there are threads. * ff_vk_exec_pool_init_desc() MUST be called if ff_vk_exec_descriptor_set_add() * has been called. */ -- 2.45.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".