diff options
author | Tom Hacohen <tom@stosb.com> | 2016-06-01 13:14:30 +0100 |
---|---|---|
committer | Tom Hacohen <tom@stosb.com> | 2016-06-01 13:33:21 +0100 |
commit | a6a23389625a5c65747bc648424db18173f563b9 (patch) | |
tree | f0c13bdb49c9211a90b9d2a034c2a4333b38af3e /src/lib/ecore_con/ecore_con_eet.c | |
parent | 466d9fbaf1319db4df9d576bdbe196f2557f6627 (diff) | |
download | efl-a6a23389625a5c65747bc648424db18173f563b9.tar.gz |
Revert "Eo: Remove eo_del() and make eo_unref() the replacement."
This reverts commit 546ff7bbba788ec834c5608361c0834853f2d5d7.
It seems that eo_del() is useful and removing it was creating bugs.
The issue is that the way we defined parents in eo, both the parent and
the programmer share a reference to the object. When we eo_unref() that
reference as the programmer, eo has no way to know it's this specific
reference we are freeing, and not a general one, so in some
circumstances, for example:
eo_ref(child);
eo_unref(child); // trying to delete here
eo_unref(container); // container is deleted here
eo_unref(child); // child already has 0 refs before this point.
We would have an issue with references and objects being freed too soon
and in general, issue with the references.
Having eo_del() solves that, because this one explicitly unparents if
there is a parent, meaning the reference ownership is explicitly taken
by the programmer.
eo_del() is essentially a convenience function around "check if has
parent, and if so unparent, otherwise, unref". Which should be used when
you want to delete an object although it has a parent, and is equivalent
to eo_unref() when it doesn't have one.
Diffstat (limited to 'src/lib/ecore_con/ecore_con_eet.c')
-rw-r--r-- | src/lib/ecore_con/ecore_con_eet.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/src/lib/ecore_con/ecore_con_eet.c b/src/lib/ecore_con/ecore_con_eet.c index 29cc8b7ce6..4812d577ba 100644 --- a/src/lib/ecore_con/ecore_con_eet.c +++ b/src/lib/ecore_con/ecore_con_eet.c @@ -742,7 +742,7 @@ ecore_con_eet_client_new(Ecore_Con_Server *server) EAPI void ecore_con_eet_server_free(Ecore_Con_Eet *r) { - eo_unref(r); + eo_del(r); } EAPI void |