render/gles2: fix EGL use-after-free

The wlr_egl was cleaned up too early.

While at it, also fix a memory leak.

Fixes: b899a412e3 ("backend: remove wlr_egl from all backends")
This commit is contained in:
Simon Ser 2021-01-12 10:45:14 +01:00
parent 248b8e647a
commit 2585f322cb
No known key found for this signature in database
GPG key ID: 0FDE7BE0E88F5E48

View file

@ -674,7 +674,6 @@ static void gles2_destroy(struct wlr_renderer *wlr_renderer) {
struct wlr_gles2_renderer *renderer = gles2_get_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_make_current(renderer->egl, EGL_NO_SURFACE, NULL);
wlr_egl_finish(renderer->egl);
struct wlr_gles2_buffer *buffer, *buffer_tmp; struct wlr_gles2_buffer *buffer, *buffer_tmp;
wl_list_for_each_safe(buffer, buffer_tmp, &renderer->buffers, link) { 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_unset_current(renderer->egl);
wlr_egl_finish(renderer->egl);
free(renderer->egl);
if (renderer->drm_fd >= 0) { if (renderer->drm_fd >= 0) {
close(renderer->drm_fd); close(renderer->drm_fd);
} }