efl_ui_layout: only delete and unparent objects here when alive
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Wed, 17 Apr 2019 16:51:32 +0000 (18:51 +0200)
committerYeongjong Lee <yj34.lee@samsung.com>
Wed, 24 Apr 2019 05:24:47 +0000 (14:24 +0900)
something else might cause the object to get magically revived. Once the
object is invalidated, some things are able to set a parent again, which
causes the widget to continue with refcount 1 and a parent.

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D8637

src/lib/elementary/efl_ui_layout.c

index 7c5f03a..61bb413 100644 (file)
@@ -1185,8 +1185,11 @@ _efl_ui_layout_content_set(Eo *obj, Efl_Ui_Layout_Data *sd, const char *part, Ev
              if (!strcmp(part, sub_d->part))
                {
                   if (content == sub_d->obj) goto end;
-                  _eo_unparent_helper(sub_d->obj, obj);
-                  evas_object_del(sub_d->obj);
+                  if (efl_alive_get(sub_d->obj))
+                    {
+                       _eo_unparent_helper(sub_d->obj, obj);
+                       evas_object_del(sub_d->obj);
+                    }
                   break;
                }
              /* was previously swallowed at another part -- mimic