From 7e2e576c32820006b02659f0255a5aece84e02c4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 2 Jun 2025 13:15:06 -0400 Subject: [PATCH] zink: unlock instance mutex if creation fails avoids a deadlock Fixes: 015eda4a418 ("zink: deduplicate VkDevice and VkInstance") Part-of: (cherry picked from commit cb6dfc4169c2ea3390b3cd5e1fe2885c13826601) --- .pick_status.json | 2 +- src/gallium/drivers/zink/zink_screen.c | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 4ab3fca134b..e33a2f5ff83 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1014,7 +1014,7 @@ "description": "zink: unlock instance mutex if creation fails", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "015eda4a4186c75538a0aa915e380c5ce5863319", "notes": null diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index a7fe1d683eb..68fb77a4bd7 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -3279,8 +3279,10 @@ zink_internal_create_screen(const struct pipe_screen_config *config, int64_t dev if (++instance_refcount == 1) { instance_info.loader_version = zink_get_loader_version(screen); instance = zink_create_instance(screen, &instance_info); - if (!instance) + if (!instance) { + simple_mtx_unlock(&instance_lock); goto fail; + } } else { assert(instance); }