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; \ --