EAPI void eo_manual_free(Eo *obj);
/**
+ * @brief Checks if the object was already descructed (only relevant for manual_free objects).
+ * @param obj the object to check.
+ * This function checks if the object was already destructed (but not alraedy
+ * freed). It should only be used with objects that are supposed to be manually
+ * freed, but not yet freed (but possibly destructed).
+ *
+ * @see eo_manual_free_set()
+ */
+EAPI Eina_Bool eo_destructed_is(const Eo *obj);
+
+/**
* @addtogroup Eo_Composite_Objects Composite Objects.
* @{
*/
return comp_obj->composite;
}
+EAPI Eina_Bool
+eo_destructed_is(const Eo *obj)
+{
+ EO_MAGIC_RETURN_VAL(obj, EO_EINA_MAGIC, EINA_FALSE);
+
+ return obj->del;
+}
+
EAPI void
eo_manual_free_set(Eo *obj, Eina_Bool manual_free)
{
obj = eo_add(klass, NULL);
fail_if(!obj);
eo_manual_free(obj);
+ fail_if(eo_destructed_is(obj));
eo_unref(obj);
+ fail_if(!eo_destructed_is(obj));
eo_manual_free(obj);
obj = eo_add(klass, NULL);
fail_if(!obj);
eo_unref(obj);
+ fail_if(!eo_destructed_is(obj));
eo_manual_free(obj);
_man_should_con = EINA_FALSE;
eo_manual_free_set((Eo *) buf, EINA_TRUE);
eo_manual_free((Eo *) buf);
+ eo_destructed_is((Eo *) buf);
eo_unref(obj);