jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=7231a3295bc2d6238d2e95999be7f642d4b6730a
commit 7231a3295bc2d6238d2e95999be7f642d4b6730a Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Wed Jul 19 15:25:46 2017 +0900 eo: Fix deadlock due to the shared mutex Explicit lock / unlock of the shared mutex mixed with implicit lock / unlock when accessing the internal Eo_Object data lead to uncaught issues such as these. This was found by trying to run E with gfx filters under eo_debug. --- src/lib/eo/eo.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index 2345fd3196..5af21f5f74 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -1695,12 +1695,14 @@ efl_isa(const Eo *eo_id, const Efl_Class *klass_id) // Currently implemented by reusing the LAST op id. Just marking it with // _eo_class_isa_func. isa = tdata->cache.isa = (func && (func->func == _eo_class_isa_func)); + EO_OBJ_DONE(eo_id); eina_lock_release(&(_eo_table_data_shared_data->obj_lock)); } return isa; err_shared_class: _EO_POINTER_ERR(klass_id, "Class (%p) is an invalid ref.", klass_id); + EO_OBJ_DONE(eo_id); err_shared_obj: eina_lock_release(&(_eo_table_data_shared_data->obj_lock)); return EINA_FALSE; --