Eo add: beef up error reporting.
authorTom Hacohen <tom@stosb.com>
Fri, 23 Jan 2015 16:51:02 +0000 (16:51 +0000)
committerTom Hacohen <tom@stosb.com>
Fri, 23 Jan 2015 16:51:18 +0000 (16:51 +0000)
In some cases object ceration would fail without an error,
this is bad and should not happen.

Thanks to cedric for reporting.

src/lib/eo/eo.c
src/lib/eo/eo_ptr_indirection.h

index 96f190d..a0adecd 100644 (file)
@@ -933,7 +933,10 @@ _eo_add_internal_end(Eo *eo_id)
      }
 
    if (EINA_UNLIKELY(!fptr->o.obj))
-      return NULL;
+     {
+        ERR("Corrupt call stuck, shouldn't happen, please report!");
+        return NULL;
+     }
 
    if (!fptr->o.obj->condtor_done || fptr->o.obj->do_error)
      {
index 9978701..c801e47 100644 (file)
 #define EO_OBJ_POINTER_RETURN_VAL(obj_id, obj, ret) \
    _Eo_Object *obj; \
    do { \
+        if (!obj_id) return ret; \
         obj = _eo_obj_pointer_get((Eo_Id)obj_id); \
-        if (!obj) return ret; \
+        if (!obj) { \
+             ERR("Obj (%p) is an invalid ref.", obj_id); \
+             return ret; \
+        } \
    } while (0)
 
 #define EO_OBJ_POINTER_RETURN(obj_id, obj)   \
    _Eo_Object *obj; \
    do { \
+        if (!obj_id) return; \
         obj = _eo_obj_pointer_get((Eo_Id)obj_id);   \
-        if (!obj) return; \
+        if (!obj) { \
+             ERR("Obj (%p) is an invalid ref.", obj_id); \
+             return; \
+        } \
    } while (0)
 
 #define EO_CLASS_POINTER_RETURN_VAL(klass_id, klass, ret) \
    _Eo_Class *klass; \
    do { \
+        if (!klass_id) return ret; \
         klass = _eo_class_pointer_get(klass_id); \
-        if (!klass) return ret; \
+        if (!klass) { \
+             ERR("Klass (%p) is an invalid ref.", klass_id); \
+             return ret; \
+        } \
    } while (0)
 
 #define EO_CLASS_POINTER_RETURN(klass_id, klass)   \
    _Eo_Class *klass; \
    do { \
+        if (!klass_id) return; \
         klass = _eo_class_pointer_get(klass_id); \
-        if (!klass) return; \
+        if (!klass) { \
+             ERR("Klass (%p) is an invalid ref.", klass_id); \
+             return; \
+        } \
    } while (0)
 
 #else