discomfitor pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=8b8703cfa68578858b90b2dbf7393abde4c6d824

commit 8b8703cfa68578858b90b2dbf7393abde4c6d824
Author: Mike Blumenkrantz <[email protected]>
Date:   Fri Jun 23 17:41:39 2017 -0400

    use safe list iterating when clearing a gadget site during shutdown
    
    demo gadgets are immediately removed when deleted, leading to list
    corruption unless a safe iterator is used
---
 src/bin/e_gadget.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/bin/e_gadget.c b/src/bin/e_gadget.c
index cb0d4da6d..c5ccd4dd2 100644
--- a/src/bin/e_gadget.c
+++ b/src/bin/e_gadget.c
@@ -1283,7 +1283,7 @@ _site_del(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *e
 {
    E_Gadget_Site *zgs = data;
    E_Gadget_Config *zgc;
-   Eina_List *l;
+   Eina_List *l, *ll;
 
    E_FREE_FUNC(zgs->events, evas_object_del);
    zgs->layout = NULL;
@@ -1292,7 +1292,7 @@ _site_del(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *e
    zgs->style_cb = NULL;
    E_FREE_FUNC(zgs->move_handler, ecore_event_handler_del);
    E_FREE_FUNC(zgs->mouse_up_handler, ecore_event_handler_del);
-   EINA_LIST_FOREACH(zgs->gadgets, l, zgc)
+   EINA_LIST_FOREACH_SAFE(zgs->gadgets, l, ll, zgc)
      evas_object_del(zgc->display);
    if (zgs->name) return;
    eina_stringshare_del(zgs->name);

-- 


Reply via email to