From 76c3726ef0709b88f17ca1e1f668345227b3b9c4 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Fri, 16 Sep 2016 22:17:25 -0300 Subject: [PATCH] eina_thread: don't leak on pthread_cancel(). if we cancel a thread we should still free the context, so use the new EINA_THREAD_CLEANUP_PUSH() and EINA_THREAD_CLEANUP_POP() --- src/lib/eina/eina_thread.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/eina/eina_thread.c b/src/lib/eina/eina_thread.c index f698092ef2..f8755044d3 100644 --- a/src/lib/eina/eina_thread.c +++ b/src/lib/eina/eina_thread.c @@ -137,6 +137,8 @@ _eina_internal_call(void *context) pthread_t self; #endif + EINA_THREAD_CLEANUP_PUSH(free, c); + if (c->prio == EINA_THREAD_BACKGROUND || c->prio == EINA_THREAD_IDLE) eina_sched_prio_drop(); @@ -144,13 +146,14 @@ _eina_internal_call(void *context) #ifdef EINA_HAVE_DEBUG self = pthread_self(); _eina_debug_thread_add(&self); + EINA_THREAD_CLEANUP_PUSH(_eina_debug_thread_del, &self); #endif r = c->func((void*) c->data, eina_thread_self()); #ifdef EINA_HAVE_DEBUG - _eina_debug_thread_del(&self); + EINA_THREAD_CLEANUP_POP(EINA_TRUE); #endif - free(c); + EINA_THREAD_CLEANUP_POP(EINA_TRUE); return r; }