ecore_evas: prevent duplicated ecore_evas registration
authorYeongJong Lee <yj34.lee@samsung.com>
Mon, 25 Jun 2018 19:14:01 +0000 (15:14 -0400)
committerWonki Kim <wonki_.kim@samsung.com>
Wed, 27 Jun 2018 07:54:55 +0000 (16:54 +0900)
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

index 986bd20..8050611 100644 (file)
@@ -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));