Mesa (main): zink: fix crash on dlclose when zink_internal_create_screen failed

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 13 20:03:52 UTC 2022


Module: Mesa
Branch: main
Commit: 6c1acd9301f99495494e066bf30374e453316d03
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6c1acd9301f99495494e066bf30374e453316d03

Author: Greg Depoire--Ferrer <greg.depoire at gmail.com>
Date:   Fri Feb 18 01:12:49 2022 +0100

zink: fix crash on dlclose when zink_internal_create_screen failed

When zink_internal_create_screen fails, it forgot to destroy the
flush queue but still deallocated the memory for it. Then the
automatic destructor that runs when library is unloaded was accessing
freed memory and crashing.

Signed-off-by: Greg Depoire--Ferrer <greg.depoire at gmail.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15071>

---

 src/gallium/drivers/zink/zink_screen.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c
index 02505bc86ea..eaff4f27a12 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -2280,6 +2280,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config)
 fail:
    if (screen->loader_lib)
       util_dl_close(screen->loader_lib);
+   if (screen->threaded)
+      util_queue_destroy(&screen->flush_queue);
 
    ralloc_free(screen);
    return NULL;



More information about the mesa-commit mailing list