diff --git a/libweston/desktop/surface.c b/libweston/desktop/surface.c index d6d0188f9..c93f16113 100644 --- a/libweston/desktop/surface.c +++ b/libweston/desktop/surface.c @@ -330,7 +330,6 @@ weston_desktop_surface_add_resource(struct weston_desktop_surface *surface, id); if (resource == NULL) { wl_client_post_no_memory(wl_client); - weston_desktop_surface_destroy(surface); return NULL; } if (destroy == NULL) diff --git a/libweston/desktop/xdg-shell-v6.c b/libweston/desktop/xdg-shell-v6.c index 9b62727d9..b3473c2a4 100644 --- a/libweston/desktop/xdg-shell-v6.c +++ b/libweston/desktop/xdg-shell-v6.c @@ -1492,13 +1492,18 @@ weston_desktop_xdg_shell_protocol_get_xdg_surface(struct wl_client *wl_client, &zxdg_surface_v6_interface, &weston_desktop_xdg_surface_implementation, id, weston_desktop_xdg_surface_resource_destroy); - if (surface->resource == NULL) + if (surface->resource == NULL) { + weston_desktop_surface_destroy(surface->desktop_surface); + free(surface); return; + } if (weston_surface_has_content(wsurface)) { wl_resource_post_error(surface->resource, ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER, "xdg_surface must not have a buffer at creation"); + weston_desktop_surface_destroy(surface->desktop_surface); + free(surface); return; } } diff --git a/libweston/desktop/xdg-shell.c b/libweston/desktop/xdg-shell.c index 818345569..3c025d3f6 100644 --- a/libweston/desktop/xdg-shell.c +++ b/libweston/desktop/xdg-shell.c @@ -2087,8 +2087,11 @@ weston_desktop_xdg_shell_protocol_get_xdg_surface(struct wl_client *wl_client, &xdg_surface_interface, &weston_desktop_xdg_surface_implementation, id, weston_desktop_xdg_surface_resource_destroy); - if (surface->resource == NULL) + if (surface->resource == NULL) { + weston_desktop_surface_destroy(surface->desktop_surface); + free(surface); return; + } } static void