Eobj: Fixed a potential bug in eobj_super_do.
authortasn <tasn>
Thu, 12 Apr 2012 08:27:31 +0000 (08:27 +0000)
committertasn <tasn@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Thu, 12 Apr 2012 08:27:31 +0000 (08:27 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/PROTO/eobj@70126 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

lib/eobj.c

index 34196c0..0ce4a22 100644 (file)
@@ -215,13 +215,13 @@ typedef struct
    const Eobj_Class **kls_itr;
 } Eobj_Kls_Itr_Node;
 
-static inline void
+static inline Eina_Bool
 _eobj_kls_itr_init(Eobj *obj, Eobj_Op op)
 {
    if (obj->kls_itr &&
          EINA_INLIST_CONTAINER_GET(obj->kls_itr, Eobj_Kls_Itr_Node))
      {
-        /* Nothing ATM. */
+        return EINA_FALSE;
      }
    else
      {
@@ -230,6 +230,8 @@ _eobj_kls_itr_init(Eobj *obj, Eobj_Op op)
         node->kls_itr = obj->klass->mro;
         obj->kls_itr = eina_inlist_prepend(obj->kls_itr,
               EINA_INLIST_GET(node));
+
+        return EINA_TRUE;
      }
 }
 
@@ -410,7 +412,7 @@ eobj_super_do(Eobj *obj, Eobj_Op op, ...)
 
    Eina_Bool ret = EINA_TRUE;
    va_list p_list;
-   _eobj_kls_itr_init(obj, op);
+   Eina_Bool kls_itr_end = _eobj_kls_itr_init(obj, op);
    obj_klass = _eobj_kls_itr_next(obj);
 
    if (!obj_klass) goto end;
@@ -430,7 +432,7 @@ eobj_super_do(Eobj *obj, Eobj_Op op, ...)
    va_end(p_list);
 
 end:
-   _eobj_kls_itr_end(obj, op);
+   if (kls_itr_end) _eobj_kls_itr_end(obj, op);
    return ret;
 }