@samitouri / QOSamiQemu / commits / baca25172d

ui/egl: fix render node cleanup order

ASAN detected some memory leaks when terminating. Release thread-bound EGL state first, destroy the context and terminate the display while the GBM device is still alive, then destroy GBM and close the render-node fd. Reviewed-by: Akihiko Odaki <odaki@rsg.ci.i.u-tokyo.ac.jp> Fixes: a3cf9b55bbdc ("ui/egl: implement display and EGL cleanup") Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Message-ID: <20260820132014.2729748-1-marcandre.lureau@redhat.com>

Marc-André Lureau committed Aug 20, 2026 at 17:20 UTC baca25172d8c195b9abbe6f8a3ab5915dba09a91
1 file changed +9 -6
ui/egl-helpers.c
+9 -6
@@ -736,19 +736,22 @@ bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp)
736
737 void egl_cleanup(void)
738 {
739 + if (qemu_egl_display) {
740 + eglReleaseThread();
741 + }
742 +
743 if (qemu_egl_rn_ctx) {
744 eglDestroyContext(qemu_egl_display, qemu_egl_rn_ctx);
745 qemu_egl_rn_ctx = NULL;
746 }
747
744 -#ifdef CONFIG_GBM
745 - g_clear_pointer(&qemu_egl_rn_gbm_dev, gbm_device_destroy);
746 - g_clear_fd(&qemu_egl_rn_fd, NULL);
747 -#endif
748 -
748 if (qemu_egl_display) {
750 - eglReleaseThread();
749 eglTerminate(qemu_egl_display);
750 qemu_egl_display = NULL;
751 }
752 +
753 +#ifdef CONFIG_GBM
754 + g_clear_pointer(&qemu_egl_rn_gbm_dev, gbm_device_destroy);
755 + g_clear_fd(&qemu_egl_rn_fd, NULL);
756 +#endif
757 }