barbieri pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=76c3726ef0709b88f17ca1e1f668345227b3b9c4
commit 76c3726ef0709b88f17ca1e1f668345227b3b9c4 Author: Gustavo Sverzut Barbieri <barbi...@profusion.mobi> Date: Fri Sep 16 22:17:25 2016 -0300 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 f698092..f875504 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; } --