From b2400e254af368c1bfbdbe6fa6f1ee462576be63 Mon Sep 17 00:00:00 2001 From: Duna Oh Date: Thu, 19 May 2016 10:58:36 +0900 Subject: [PATCH] Evas Device: use EINA_LIST_FOREACH_SAFE instead of EINA_LIST_FREE evas_device_del does eina_list_remove, and EINA_LIST_FREE does the same thing. It can causes memory leak and possible crash. (reported by valgrind) Signed-off-by: Duna Oh Change-Id: I2166f1eb4672ffe65dd961d608557018ade1cae0 --- src/lib/evas/canvas/evas_device.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_device.c b/src/lib/evas/canvas/evas_device.c index effed55..68c743b 100644 --- a/src/lib/evas/canvas/evas_device.c +++ b/src/lib/evas/canvas/evas_device.c @@ -242,6 +242,7 @@ void _evas_device_cleanup(Evas *eo_e) { Evas_Device *dev; + Eina_List *l1, *l2; Evas_Public_Data *e = eo_data_scope_get(eo_e, EVAS_CANVAS_CLASS); if (e->cur_device) @@ -251,9 +252,10 @@ _evas_device_cleanup(Evas *eo_e) eina_array_free(e->cur_device); e->cur_device = NULL; } - EINA_LIST_FREE(e->devices, dev) + EINA_LIST_FOREACH_SAFE(e->devices, l1, l2, dev) { - evas_device_del(dev); + while (dev) + evas_device_del(dev); } } -- 2.7.4