render/gles2: fix EGL use-after-free
The wlr_egl was cleaned up too early.
While at it, also fix a memory leak.
Fixes: ("backend: remove wlr_egl from all backends")
@@ -674,7 +674,6 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
struct wlr_gles2_renderer *renderer = gles2_get_renderer(wlr_renderer);
wlr_egl_make_current(renderer->egl, EGL_NO_SURFACE, NULL);
- wlr_egl_finish(renderer->egl);
struct wlr_gles2_buffer *buffer, *buffer_tmp;
wl_list_for_each_safe(buffer, buffer_tmp, &renderer->buffers, link) {
@@ -696,6 +695,9 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
wlr_egl_unset_current(renderer->egl);
+ wlr_egl_finish(renderer->egl);
+ free(renderer->egl);
+
if (renderer->drm_fd >= 0) {
close(renderer->drm_fd);
}
