discomfitor pushed a commit to branch master.

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

commit a522bf5d7625c49cfd4d25f477633b764f2317f8
Author: YeongJong Lee <[email protected]>
Date:   Mon Jun 25 15:14:01 2018 -0400

    ecore_evas: prevent duplicated ecore_evas registration
    
    Summary:
    After a44697c37a304c0d4d574b6772775c6936869e24, we can register same 
ecore_evas
    to ecore_evases using ecore_evas_input_event_register.
    (ecore_evas_input_event_register -> ecore_evas_done -> _ecore_evas_register)
    This can make infinite loop in EINA_INLIST_FOREACH(ecore_evases, ee) because
    next inlist of ecore_evases is ecore_evases after double call of
    _ecore_evas_register.
    
    This patch prevent it.
    
    Test Plan:
    Ecore_Evas *ee = ecore_evas_new(NULL, 0, 0, 800, 600, NULL);
    ecore_evas_input_event_register(ee);
    (part of document of ecore_fb_input_device_window_set)
    
    Check that there is no infinite loop
    
    Reviewers: zmike, devilhorns
    
    Reviewed By: zmike
    
    Subscribers: cedric, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D6390
---
 src/lib/ecore_evas/ecore_evas.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/lib/ecore_evas/ecore_evas.c b/src/lib/ecore_evas/ecore_evas.c
index da3401a286..52dfc36db1 100644
--- a/src/lib/ecore_evas/ecore_evas.c
+++ b/src/lib/ecore_evas/ecore_evas.c
@@ -3256,6 +3256,8 @@ _ecore_evas_register_animators(Ecore_Evas *ee)
 EAPI void
 _ecore_evas_register(Ecore_Evas *ee)
 {
+   if (ee->registered) return;
+
    ee->registered = 1;
    ecore_evases = (Ecore_Evas *)eina_inlist_prepend
      (EINA_INLIST_GET(ecore_evases), EINA_INLIST_GET(ee));

-- 


Reply via email to