From 1e6e3427f032a3ca0193d57facbd9a63b75e6a7c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 10 Apr 2023 09:47:06 -0400 Subject: [PATCH] drisw: don't leak the winsys if a winsys is allocated by the frontend, it should be freed by the frontend rather than the driver to ensure it doesn't leak if it doesn't reach the driver cc: mesa-stable Reviewed-by: Jesse Natalie Part-of: --- src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c | 1 + src/gallium/drivers/llvmpipe/lp_screen.c | 3 --- src/gallium/drivers/softpipe/sp_screen.c | 6 ------ 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c index 75a247d43d1..e11837f2c47 100644 --- a/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c +++ b/src/gallium/auxiliary/pipe-loader/pipe_loader_sw.c @@ -382,6 +382,7 @@ pipe_loader_sw_release(struct pipe_loader_device **dev) UNUSED struct pipe_loader_sw_device *sdev = pipe_loader_sw_device(*dev); + sdev->ws->destroy(sdev->ws); #ifndef GALLIUM_STATIC_TARGETS if (sdev->lib) util_dl_close(sdev->lib); diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c index 2ffc941e09a..7d5e5c72013 100644 --- a/src/gallium/drivers/llvmpipe/lp_screen.c +++ b/src/gallium/drivers/llvmpipe/lp_screen.c @@ -860,7 +860,6 @@ static void llvmpipe_destroy_screen(struct pipe_screen *_screen) { struct llvmpipe_screen *screen = llvmpipe_screen(_screen); - struct sw_winsys *winsys = screen->winsys; if (screen->cs_tpool) lp_cs_tpool_destroy(screen->cs_tpool); @@ -871,8 +870,6 @@ llvmpipe_destroy_screen(struct pipe_screen *_screen) lp_jit_screen_cleanup(screen); disk_cache_destroy(screen->disk_shader_cache); - if (winsys->destroy) - winsys->destroy(winsys); glsl_type_singleton_decref(); diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c index 7bd792f3225..74ff914a01f 100644 --- a/src/gallium/drivers/softpipe/sp_screen.c +++ b/src/gallium/drivers/softpipe/sp_screen.c @@ -490,12 +490,6 @@ softpipe_is_format_supported( struct pipe_screen *screen, static void softpipe_destroy_screen( struct pipe_screen *screen ) { - struct softpipe_screen *sp_screen = softpipe_screen(screen); - struct sw_winsys *winsys = sp_screen->winsys; - - if(winsys->destroy) - winsys->destroy(winsys); - FREE(screen); }