Eo: renamed the Magic for freed objects and better handle deleted objects.

Now we differentiate between deleted but not freed vs deleted and freed
objects.

SVN revision: 71710
This commit is contained in:
Tom Hacohen 2012-06-05 12:05:06 +00:00
parent 8f1077493f
commit a2cdb54d6b
2 changed files with 8 additions and 10 deletions

View File

@ -1189,13 +1189,10 @@ eo_ref(const Eo *_obj)
static inline void
_eo_del_internal(Eo *obj)
{
if (obj->del)
return;
/* We need that for the event callbacks that may ref/unref. */
obj->refcount++;
eo_do(obj, eo_event_callback_call(EO_EV_DEL, NULL, NULL));
obj->del = EINA_TRUE;
const Eo_Class *klass = eo_class_get(obj);
Eo_Kls_Itr prev_state;
@ -1222,13 +1219,14 @@ _eo_del_internal(Eo *obj)
eo_composite_object_detach(obj, emb_obj);
}
obj->del = EINA_TRUE;
obj->refcount--;
}
static inline void
_eo_free(Eo *obj)
{
EINA_MAGIC_SET(obj, EO_DELETED_EINA_MAGIC);
EINA_MAGIC_SET(obj, EO_FREED_EINA_MAGIC);
free(obj);
}
@ -1441,8 +1439,8 @@ eo_init(void)
}
eina_magic_string_static_set(EO_EINA_MAGIC, EO_EINA_MAGIC_STR);
eina_magic_string_static_set(EO_DELETED_EINA_MAGIC,
EO_DELETED_EINA_MAGIC_STR);
eina_magic_string_static_set(EO_FREED_EINA_MAGIC,
EO_FREED_EINA_MAGIC_STR);
eina_magic_string_static_set(EO_CLASS_EINA_MAGIC,
EO_CLASS_EINA_MAGIC_STR);

View File

@ -1,11 +1,11 @@
#ifndef _EO_PRIVATE_H
#define _EO_PRIVATE_H
#define EO_EINA_MAGIC 0xa186bc32 /* Nothing magical about this number. */
#define EO_EINA_MAGIC 0xa186bc32
#define EO_EINA_MAGIC_STR "Eo"
#define EO_DELETED_EINA_MAGIC 0xa186bb32 /* Nothing magical about this number. */
#define EO_DELETED_EINA_MAGIC_STR "Eo - Deleted object"
#define EO_CLASS_EINA_MAGIC 0xa186ba32 /* Nothing magical about this number. */
#define EO_FREED_EINA_MAGIC 0xa186bb32
#define EO_FREED_EINA_MAGIC_STR "Eo - Freed object"
#define EO_CLASS_EINA_MAGIC 0xa186ba32
#define EO_CLASS_EINA_MAGIC_STR "Eo Class"
#define EO_MAGIC_RETURN_VAL(d, magic, ret) \