From 618c883b8ec99162c02f1eba6796b281f987afc2 Mon Sep 17 00:00:00 2001 From: Emil Velikov Date: Sun, 27 Aug 2017 11:20:27 +0100 Subject: egl/wayland: plug leaks in dri2_wl_create_window_surface() error path We forgot to teardown the wl display/surface wrappers. Fixes: 03dd9a88b0b ("egl/wayland: Use per-surface event queues") Signed-off-by: Emil Velikov Reviewed-by: Daniel Stone (cherry picked from commit 83442112d7136b6d0c2f6d84c409c04664aeb154) --- src/egl/drivers/dri2/platform_wayland.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/egl/drivers/dri2/platform_wayland.c b/src/egl/drivers/dri2/platform_wayland.c index e5a867b6f02..a65338eb9c4 100644 --- a/src/egl/drivers/dri2/platform_wayland.c +++ b/src/egl/drivers/dri2/platform_wayland.c @@ -174,7 +174,7 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, dri2_surf->wl_surface_wrapper = wl_proxy_create_wrapper(window->surface); if (!dri2_surf->wl_surface_wrapper) { _eglError(EGL_BAD_ALLOC, "dri2_create_surface"); - goto cleanup_drm; + goto cleanup_dpy_wrapper; } wl_proxy_set_queue((struct wl_proxy *)dri2_surf->wl_surface_wrapper, dri2_surf->wl_queue); @@ -200,7 +200,7 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, dri2_surf); if (dri2_surf->dri_drawable == NULL) { _eglError(EGL_BAD_ALLOC, "createNewDrawable"); - goto cleanup_surf; + goto cleanup_surf_wrapper; } dri2_wl_swap_interval(drv, disp, &dri2_surf->base, @@ -208,6 +208,10 @@ dri2_wl_create_window_surface(_EGLDriver *drv, _EGLDisplay *disp, return &dri2_surf->base; + cleanup_surf_wrapper: + wl_proxy_wrapper_destroy(dri2_surf->wl_surface_wrapper); + cleanup_dpy_wrapper: + wl_proxy_wrapper_destroy(dri2_surf->wl_dpy_wrapper); cleanup_drm: if (dri2_surf->wl_drm_wrapper) wl_proxy_wrapper_destroy(dri2_surf->wl_drm_wrapper); -- cgit v1.2.3