From 064b46b7a3ab223c2453628d22ae80db5868b2c6 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Wed, 7 Aug 2019 16:59:43 +0100 Subject: [PATCH] evas egl - esnure we always destroy surfaces because creating new ones be sure we dont leak them. --- src/modules/evas/engines/eglfs/evas_outbuf.c | 2 ++ src/modules/evas/engines/gl_drm/evas_outbuf.c | 2 ++ src/modules/evas/engines/gl_x11/evas_x_main.c | 2 ++ src/modules/evas/engines/wayland_egl/evas_wl_main.c | 2 ++ 4 files changed, 8 insertions(+) diff --git a/src/modules/evas/engines/eglfs/evas_outbuf.c b/src/modules/evas/engines/eglfs/evas_outbuf.c index ba732861ab..958ea7751a 100644 --- a/src/modules/evas/engines/eglfs/evas_outbuf.c +++ b/src/modules/evas/engines/eglfs/evas_outbuf.c @@ -296,6 +296,8 @@ _evas_outbuf_egl_setup(Outbuf *ob) ob->egl.config = cfgs[0]; EGLNativeWindowType win = create_hwcomposernativewindow(); + if (ob->egl.surface[0] != EGL_NO_SURFACE) + eglDestroySurface(ob->egl.disp, ob->egl.surface[0]); ob->egl.surface[0] = eglCreateWindowSurface(ob->egl.disp, ob->egl.config, (EGLNativeWindowType)win, NULL); diff --git a/src/modules/evas/engines/gl_drm/evas_outbuf.c b/src/modules/evas/engines/gl_drm/evas_outbuf.c index f478da9885..4fe4a7f30c 100644 --- a/src/modules/evas/engines/gl_drm/evas_outbuf.c +++ b/src/modules/evas/engines/gl_drm/evas_outbuf.c @@ -502,6 +502,8 @@ evas_outbuf_resurf(Outbuf *ob) if (ob->surf) return; if (getenv("EVAS_GL_INFO")) printf("resurf %p\n", ob); + if (ob->egl.surface != EGL_NO_SURFACE) + eglDestroySurface(ob->egl.disp, ob->egl.surface); ob->egl.surface = eglCreateWindowSurface(ob->egl.disp, ob->egl.config, (EGLNativeWindowType)ob->surface, NULL); diff --git a/src/modules/evas/engines/gl_x11/evas_x_main.c b/src/modules/evas/engines/gl_x11/evas_x_main.c index 6bf74af556..8c304784e6 100644 --- a/src/modules/evas/engines/gl_x11/evas_x_main.c +++ b/src/modules/evas/engines/gl_x11/evas_x_main.c @@ -824,6 +824,8 @@ eng_window_resurf(Outbuf *gw) if (gw->surf) return; if (getenv("EVAS_GL_INFO")) printf("resurf %p\n", gw); #ifdef GL_GLES + if (gw->egl_surface) + eglDestroySurface(gw->egl_disp, gw->egl_surface); gw->egl_surface = eglCreateWindowSurface(gw->egl_disp, gw->egl_config, (EGLNativeWindowType)gw->win, NULL); diff --git a/src/modules/evas/engines/wayland_egl/evas_wl_main.c b/src/modules/evas/engines/wayland_egl/evas_wl_main.c index ff78e72cca..55e6a51e24 100644 --- a/src/modules/evas/engines/wayland_egl/evas_wl_main.c +++ b/src/modules/evas/engines/wayland_egl/evas_wl_main.c @@ -339,6 +339,8 @@ eng_window_resurf(Outbuf *gw) gw->win = wl_egl_window_create(wls, gw->h, gw->w); } + if (gw->egl_surface != EGL_NO_SURFACE) + eglDestroySurface(gw->egl_disp, gw->egl_surface); gw->egl_surface = eglCreateWindowSurface(gw->egl_disp, gw->egl_config, (EGLNativeWindowType)gw->win, NULL);