From 1965a906130bcac87f6edb068339d70119604358 Mon Sep 17 00:00:00 2001 From: Reda Maher Date: Mon, 28 Sep 2020 02:26:22 +0200 Subject: [PATCH] Posix: Free the condition variable memory in the correct place In case of deleting a task from another task, the deletion happens immediately and the thread is canceled but the memory allocated by the task condition variable is not freed. This causes the memory checkers (Valgrind, Address sanitizers, ..) to complain. --- portable/ThirdParty/GCC/Posix/port.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/portable/ThirdParty/GCC/Posix/port.c b/portable/ThirdParty/GCC/Posix/port.c index 108c1d95d..45bb6f0f5 100644 --- a/portable/ThirdParty/GCC/Posix/port.c +++ b/portable/ThirdParty/GCC/Posix/port.c @@ -411,6 +411,7 @@ Thread_t *pxThreadToCancel = prvGetThreadFromTask( pxTaskToDelete ); */ pthread_cancel( pxThreadToCancel->pthread ); pthread_join( pxThreadToCancel->pthread, NULL ); + event_delete( pxThreadToCancel->ev ); } /*-----------------------------------------------------------*/ @@ -450,7 +451,6 @@ BaseType_t uxSavedCriticalNesting; prvResumeThread( pxThreadToResume ); if ( pxThreadToSuspend->xDying ) { - event_delete(pxThreadToSuspend->ev); pthread_exit( NULL ); } prvSuspendSelf( pxThreadToSuspend );