From 254b300f6be86d38dd6904a34d2e2fdbd3d90763 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Thu, 2 May 2024 08:14:13 -0400 Subject: [PATCH] frontends/dri: only release pipe when screen init fails the caller (driCreateNewScreen3) will always call dri_destroy_screen() when these functions return failure, so releasing the screen is always wrong cc: mesa-stable Reviewed-by: Adam Jackson Part-of: (cherry picked from commit a1225e81c9d0d2b6ada9e6af51be710d2ae2d4dc) --- .pick_status.json | 2 +- src/gallium/frontends/dri/dri2.c | 4 ++-- src/gallium/frontends/dri/drisw.c | 4 ++-- src/gallium/frontends/dri/kopper.c | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 1a5b6cba66d..dc04f850ce3 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -514,7 +514,7 @@ "description": "frontends/dri: only release pipe when screen init fails", "nominated": true, "nomination_type": 0, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": null, "notes": null diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c index ad68f3b08c0..d0f87d9c46f 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c @@ -2385,7 +2385,7 @@ dri2_init_screen(struct dri_screen *screen) pscreen = pipe_loader_create_screen(screen->dev); if (!pscreen) - goto fail; + return NULL; dri_init_options(screen); screen->throttle = pscreen->get_param(pscreen, PIPE_CAP_THROTTLE); @@ -2419,7 +2419,7 @@ dri2_init_screen(struct dri_screen *screen) return configs; fail: - dri_release_screen(screen); + pipe_loader_release(&screen->dev, 1); return NULL; } diff --git a/src/gallium/frontends/dri/drisw.c b/src/gallium/frontends/dri/drisw.c index 7c6a75a228b..777707c04dc 100644 --- a/src/gallium/frontends/dri/drisw.c +++ b/src/gallium/frontends/dri/drisw.c @@ -565,7 +565,7 @@ drisw_init_screen(struct dri_screen *screen) pscreen = pipe_loader_create_screen(screen->dev); if (!pscreen) - goto fail; + return NULL; dri_init_options(screen); configs = dri_init_screen(screen, pscreen); @@ -593,7 +593,7 @@ drisw_init_screen(struct dri_screen *screen) return configs; fail: - dri_release_screen(screen); + pipe_loader_release(&screen->dev, 1); return NULL; } diff --git a/src/gallium/frontends/dri/kopper.c b/src/gallium/frontends/dri/kopper.c index 61893e7012c..e42035fa426 100644 --- a/src/gallium/frontends/dri/kopper.c +++ b/src/gallium/frontends/dri/kopper.c @@ -134,7 +134,7 @@ kopper_init_screen(struct dri_screen *screen) pscreen = pipe_loader_create_screen(screen->dev); if (!pscreen) - goto fail; + return NULL; dri_init_options(screen); screen->unwrapped_screen = trace_screen_unwrap(pscreen); @@ -167,7 +167,7 @@ kopper_init_screen(struct dri_screen *screen) return configs; fail: - dri_release_screen(screen); + pipe_loader_release(&screen->dev, 1); return NULL; }