From 0a6697804154f450df0466b029c8bbbf0b149c78 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Wed, 21 Feb 2018 16:39:37 -0600 Subject: [PATCH] ee_wayland: Fix ecore_wl2 refcounting breakage on some failures If we have a blacklisted gl implementation then we'll create a canvas, it'll fail to be useful, and we'll free it - which calls ecore_wl2_shutdown(), but then we'll also call ecore_wl2_shutdown() a second time further down the failure path. Take a bonus reference before freeing the failed canvas to keep refcounts sane. --- .../ecore_evas/engines/wayland/ecore_evas_wayland_common.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c index 2a5b71ec3b..c66da96a0c 100644 --- a/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c +++ b/src/modules/ecore_evas/engines/wayland/ecore_evas_wayland_common.c @@ -2595,7 +2595,9 @@ _ecore_evas_wl_common_new_internal(const char *disp_name, unsigned int parent, i eng_err: /* ecore_evas_free() will call ecore_wl2_display_disconnect() - * and free(ee) */ + * and free(ee), it will also call ecore_wl2_shutdown(), so we + * take an extra reference here to keep the count right. */ + ecore_wl2_init(); ecore_evas_free(ee); ee = NULL; w_err: