jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=dd2f450ea7558171a567c1da0e9eb7ef8b324778

commit dd2f450ea7558171a567c1da0e9eb7ef8b324778
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Tue Jan 16 19:48:49 2018 +0900

    eo: Fix make check
    
    The cache had a generation count, removing this check breaks eo suite.
    EO is designed to tolerate init/shutdown cycles (as long as
    dlopen/dlclose isn't involved).
    
    Note: the ugly goto are useless as GCC -O2 understands EINA_(UN)LIKELY
    and deals with it as expected (just look at the asm produced).
    
    See 34d9f2070696027199a56cb621c0526ea1430e8f
---
 src/lib/eo/Eo.h | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h
index 8b489ab72a..a26e9fb7a6 100644
--- a/src/lib/eo/Eo.h
+++ b/src/lib/eo/Eo.h
@@ -1177,10 +1177,12 @@ typedef struct _Efl_Object_Op_Call_Data
 
 // cache OP id, get real fct and object data then do the call
 #define EFL_FUNC_COMMON_OP(Obj, Name, DefRet) \
-   static Efl_Object_Op ___op; /* static 0 by default */ \
+   static Efl_Object_Op ___op = 0; \
+   static unsigned int ___generation = 0; \
    Efl_Object_Op_Call_Data ___call; \
    _Eo_##Name##_func _func_;                                            \
-   if (EINA_UNLIKELY(___op == EFL_NOOP)) \
+   if (EINA_UNLIKELY((___op == EFL_NOOP) ||                       \
+                     (___generation != _efl_object_init_generation))) \
      goto __##Name##_op_create; /* yes a goto - see below */ \
    __##Name##_op_create_done: EINA_HOT; \
    if (EINA_UNLIKELY(!_efl_object_call_resolve( \
@@ -1199,6 +1201,7 @@ typedef struct _Efl_Object_Op_Call_Data
 #define EFL_FUNC_COMMON_OP_END(Obj, Name, DefRet, ErrorCase) \
 __##Name##_op_create: EINA_COLD; \
    ___op = _efl_object_op_api_id_get(EFL_FUNC_COMMON_OP_FUNC(Name), Obj, 
#Name, __FILE__, __LINE__); \
+   ___generation = _efl_object_init_generation; \
    if (EINA_UNLIKELY(___op == EFL_NOOP)) goto __##Name##_failed; \
    goto __##Name##_op_create_done; \
 __##Name##_failed: EINA_COLD; \

-- 


Reply via email to