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;

-- 


Reply via email to