From 747fd6151a05a074725a3552fab754d9562c8a22 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Fri, 9 Jul 2010 14:52:45 +0000 Subject: [PATCH] be loud about deleting timers, idlers and events more than once. SVN revision: 50158 --- legacy/ecore/src/lib/ecore/ecore_events.c | 3 +++ legacy/ecore/src/lib/ecore/ecore_idle_enterer.c | 1 + legacy/ecore/src/lib/ecore/ecore_idle_exiter.c | 1 + legacy/ecore/src/lib/ecore/ecore_idler.c | 1 + legacy/ecore/src/lib/ecore/ecore_timer.c | 14 +++++++++----- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/legacy/ecore/src/lib/ecore/ecore_events.c b/legacy/ecore/src/lib/ecore/ecore_events.c index 9746694859..6c804d61d6 100644 --- a/legacy/ecore/src/lib/ecore/ecore_events.c +++ b/legacy/ecore/src/lib/ecore/ecore_events.c @@ -156,6 +156,7 @@ ecore_event_handler_del(Ecore_Event_Handler *event_handler) "ecore_event_handler_del"); return NULL; } + EINA_SAFETY_ON_TRUE_RETURN_VAL(event_handler->delete_me, NULL); event_handler->delete_me = 1; event_handlers_delete_list = eina_list_append(event_handlers_delete_list, event_handler); return event_handler->data; @@ -214,6 +215,7 @@ ecore_event_del(Ecore_Event *event) ECORE_MAGIC_FAIL(event, ECORE_MAGIC_EVENT, "ecore_event_del"); return NULL; } + EINA_SAFETY_ON_TRUE_RETURN_VAL(event->delete_me, NULL); event->delete_me = 1; return event->data; } @@ -289,6 +291,7 @@ ecore_event_filter_del(Ecore_Event_Filter *ef) ECORE_MAGIC_FAIL(ef, ECORE_MAGIC_EVENT_FILTER, "ecore_event_filter_del"); return NULL; } + EINA_SAFETY_ON_TRUE_RETURN_VAL(ef->delete_me, NULL); ef->delete_me = 1; event_filters_delete_me = 1; return ef->data; diff --git a/legacy/ecore/src/lib/ecore/ecore_idle_enterer.c b/legacy/ecore/src/lib/ecore/ecore_idle_enterer.c index 0eda1d050f..ff92aa3355 100644 --- a/legacy/ecore/src/lib/ecore/ecore_idle_enterer.c +++ b/legacy/ecore/src/lib/ecore/ecore_idle_enterer.c @@ -89,6 +89,7 @@ ecore_idle_enterer_del(Ecore_Idle_Enterer *idle_enterer) "ecore_idle_enterer_del"); return NULL; } + EINA_SAFETY_ON_TRUE_RETURN_VAL(idle_enterer->delete_me, NULL); idle_enterer->delete_me = 1; idle_enterers_delete_me = 1; return idle_enterer->data; diff --git a/legacy/ecore/src/lib/ecore/ecore_idle_exiter.c b/legacy/ecore/src/lib/ecore/ecore_idle_exiter.c index 9b8231fca7..b964919859 100644 --- a/legacy/ecore/src/lib/ecore/ecore_idle_exiter.c +++ b/legacy/ecore/src/lib/ecore/ecore_idle_exiter.c @@ -65,6 +65,7 @@ ecore_idle_exiter_del(Ecore_Idle_Exiter *idle_exiter) "ecore_idle_exiter_del"); return NULL; } + EINA_SAFETY_ON_TRUE_RETURN_VAL(idle_exiter->delete_me, NULL); idle_exiter->delete_me = 1; idle_exiters_delete_me = 1; return idle_exiter->data; diff --git a/legacy/ecore/src/lib/ecore/ecore_idler.c b/legacy/ecore/src/lib/ecore/ecore_idler.c index e3269c3753..52f1ae2429 100644 --- a/legacy/ecore/src/lib/ecore/ecore_idler.c +++ b/legacy/ecore/src/lib/ecore/ecore_idler.c @@ -73,6 +73,7 @@ ecore_idler_del(Ecore_Idler *idler) "ecore_idler_del"); return NULL; } + EINA_SAFETY_ON_TRUE_RETURN_VAL(idler->delete_me, NULL); idler->delete_me = 1; idlers_delete_me = 1; return idler->data; diff --git a/legacy/ecore/src/lib/ecore/ecore_timer.c b/legacy/ecore/src/lib/ecore/ecore_timer.c index 9a49675f92..d7d847bf64 100644 --- a/legacy/ecore/src/lib/ecore/ecore_timer.c +++ b/legacy/ecore/src/lib/ecore/ecore_timer.c @@ -190,9 +190,9 @@ ecore_timer_del(Ecore_Timer *timer) return data; } - if (timer->delete_me) return timer->data; - timers_delete_me++; + EINA_SAFETY_ON_TRUE_RETURN_VAL(timer->delete_me, NULL); timer->delete_me = 1; + timers_delete_me++; return timer->data; } @@ -368,7 +368,7 @@ void _ecore_timer_cleanup(void) { Ecore_Timer *l; - int in_use = 0; + int in_use = 0, todo = timers_delete_me, done = 0; if (!timers_delete_me) return; for (l = timers; l;) @@ -387,6 +387,7 @@ _ecore_timer_cleanup(void) ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); free(timer); timers_delete_me--; + done++; if (timers_delete_me == 0) return; } } @@ -406,14 +407,17 @@ _ecore_timer_cleanup(void) ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE); free(timer); timers_delete_me--; + done++; if (timers_delete_me == 0) return; } } if ((!in_use) && (timers_delete_me)) { - ERR("%d timers to delete, but they were not found! reset counter.", - timers_delete_me); + ERR("%d timers to delete, but they were not found!" + "Stats: todo=%d, done=%d, pending=%d, in_use=%d. " + "reset counter.", + timers_delete_me, todo, done, todo - done, in_use); timers_delete_me = 0; } }