From 202c309b0ae3ae6d3e5fc8b2cdca97cd88331e35 Mon Sep 17 00:00:00 2001 From: YeongJong Lee Date: Mon, 25 Jun 2018 15:14:01 -0400 Subject: [PATCH] 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 986bd20..8050611 100644 --- a/src/lib/ecore_evas/ecore_evas.c +++ b/src/lib/ecore_evas/ecore_evas.c @@ -3432,6 +3432,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)); -- 2.7.4