eo: check for allow_parent_unref during efl_unref and silence warning.

Differential Revision: https://phab.enlightenment.org/D6097
This commit is contained in:
Cedric BAIL 2018-05-03 16:32:11 -07:00
parent dcfddcd283
commit c28eb28728
3 changed files with 11 additions and 3 deletions

View File

@ -1885,7 +1885,8 @@ efl_unref(const Eo *obj_id)
if (EINA_UNLIKELY(obj->user_refcount == 1 &&
obj->parent))
{
CRI("Calling efl_unref instead of efl_del or efl_parent_set(NULL). Temporary fallback in place triggered.");
if (!obj->allow_parent_unref)
CRI("Calling efl_unref instead of efl_del or efl_parent_set(NULL). Temporary fallback in place triggered.");
EO_OBJ_DONE(obj_id);
efl_del(obj_id);
return ;

View File

@ -5,7 +5,10 @@
#include <Eina.h>
#include <fnmatch.h>
#include "Eo.h"
#include <Eo.h>
#include "eo_internal.h"
#include "eo_ptr_indirection.h"
#include "eo_private.h"
#include "eina_promise_private.h"
@ -2212,9 +2215,12 @@ err_parent:
}
EOLIAN static void
_efl_object_allow_parent_unref_set(Eo *obj_id EINA_UNUSED, Efl_Object_Data *pd, Eina_Bool allow)
_efl_object_allow_parent_unref_set(Eo *obj_id, Efl_Object_Data *pd, Eina_Bool allow)
{
EO_OBJ_POINTER_RETURN(obj_id, obj);
obj->allow_parent_unref = !!allow;
pd->allow_parent_unref = !!allow;
EO_OBJ_DONE(obj_id);
}
EOLIAN static Eina_Bool

View File

@ -118,6 +118,7 @@ struct _Eo_Object
Eina_Bool invalidate:1;
Eina_Bool is_invalidating:1;
Eina_Bool parent : 1;
Eina_Bool allow_parent_unref : 1;
Eina_Bool del_triggered:1;
Eina_Bool destructed:1;