zink: Lock queue_lock in zink_destroy_screen

Fixes: 015eda4a41 ("zink: deduplicate VkDevice and VkInstance")
Reviewed-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit 018178842e)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38803>
This commit is contained in:
Mel Henning 2025-11-12 18:14:28 -05:00 committed by Dylan Baker
parent 3b6f03bd49
commit 7c1705c148
2 changed files with 7 additions and 1 deletions

View file

@ -834,7 +834,7 @@
"description": "zink: Lock queue_lock in zink_destroy_screen",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "015eda4a4186c75538a0aa915e380c5ce5863319",
"notes": null

View file

@ -1524,13 +1524,19 @@ zink_destroy_screen(struct pipe_screen *pscreen)
struct zink_screen *screen = zink_screen(pscreen);
if (!screen->device_lost && screen->queue) {
// Multiple screens can share a queue, so we need to lock queue_lock even
// in the screen destructor
simple_mtx_lock(screen->queue_lock);
VkResult result = VKSCR(QueueWaitIdle)(screen->queue);
simple_mtx_unlock(screen->queue_lock);
if (result != VK_SUCCESS)
mesa_loge("ZINK: vkQueueWaitIdle failed (%s)", vk_Result_to_str(result));
if (screen->queue_sparse && screen->queue_sparse != screen->queue) {
simple_mtx_lock(screen->queue_lock);
result = VKSCR(QueueWaitIdle)(screen->queue_sparse);
simple_mtx_unlock(screen->queue_lock);
if (result != VK_SUCCESS)
mesa_loge("ZINK: vkQueueWaitIdle failed (%s)", vk_Result_to_str(result));