evas: make objects again delete correctly
authorMarcel Hollerbach <mail@marcel-hollerbach.de>
Thu, 14 Jun 2018 19:23:28 +0000 (14:23 -0500)
committerJongmin Lee <jm105.lee@samsung.com>
Fri, 15 Jun 2018 02:35:51 +0000 (11:35 +0900)
Summary:
what here was done was fundamentally wrong, deleting the pd->object
field of a evas object after a efl_del / evas_object_del is completly
wrong. evas object lifetimes are controller with eo_manual_free, this
means, they are still alive, even after you called evas_object_del on
them. removing pd->object results in eo_menual_free calls to NULL
objects and leaking the object carrying the private data. Overall,
breaking this pd->object field and unsetting it is a very bad idea, as
its the only way that evas cleansup the object correctly.
This brings down the number of ui related leaked objects on shutdowns to
0. (YEY :))
This also fixes weird error messages on app shutdown.

fixes T6964

Reviewers: devilhorns, zmike

Reviewed By: zmike

Subscribers: cedric, #committers, zmike

Tags: #efl

Maniphest Tasks: T6964

Differential Revision: https://phab.enlightenment.org/D6290

src/lib/evas/include/evas_inline.x

index b3f1ae6..7a2af7d 100644 (file)
@@ -361,7 +361,6 @@ _evas_wrap_del(Evas_Object **eo, Evas_Object_Protected_Data *pd)
    if (!*eo) return ;
    if (pd && pd->legacy.ctor) evas_object_del(*eo);
    else efl_del(*eo);
-   *eo = NULL;
 }
 
 #define _EVAS_COLOR_CLAMP(x, y) do { \