From: Marc-André Lureau <marcandre.lureau@redhat.com>
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.
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/egl-helpers.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c
index 4ebf364397c1..8e3729a54d15 100644
--- a/ui/egl-helpers.c
+++ b/ui/egl-helpers.c
@@ -736,19 +736,22 @@ bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp)
void egl_cleanup(void)
{
+ if (qemu_egl_display) {
+ eglReleaseThread();
+ }
+
if (qemu_egl_rn_ctx) {
eglDestroyContext(qemu_egl_display, qemu_egl_rn_ctx);
qemu_egl_rn_ctx = NULL;
}
+ if (qemu_egl_display) {
+ eglTerminate(qemu_egl_display);
+ qemu_egl_display = NULL;
+ }
+
#ifdef CONFIG_GBM
g_clear_pointer(&qemu_egl_rn_gbm_dev, gbm_device_destroy);
g_clear_fd(&qemu_egl_rn_fd, NULL);
#endif
-
- if (qemu_egl_display) {
- eglReleaseThread();
- eglTerminate(qemu_egl_display);
- qemu_egl_display = NULL;
- }
}
--
2.55.0.543.g5ebe2ebe4ea8