mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-07-25 21:52:33 -04:00
Delete thread key on process exit (#1297)
Previously, the shared thread key was deleted in xPortStartScheduler after scheduler was ended. This created a race condition where prvThreadKeyDestructor (responsible for freeing thread-specific heap memory) would not be called if xPortStartScheduler deleted the key before the last task deletion, as destructors are not invoked after key deletion (see https://github.com/walac/glibc/blob/master/nptl/pthread_create.c#L145-L150). Move thread key deletion to process exit to ensure all thread-specific memory is properly freed. Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
This commit is contained in:
parent
684b34ca8d
commit
32e581636f
4
portable/ThirdParty/GCC/Posix/port.c
vendored
4
portable/ThirdParty/GCC/Posix/port.c
vendored
|
@ -140,6 +140,8 @@ static void prvThreadKeyDestructor( void * pvData )
|
|||
static void prvInitThreadKey( void )
|
||||
{
|
||||
pthread_key_create( &xThreadKey, prvThreadKeyDestructor );
|
||||
/* Destroy xThreadKey when the process exits. */
|
||||
atexit( prvDestroyThreadKey );
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
||||
|
@ -315,8 +317,6 @@ BaseType_t xPortStartScheduler( void )
|
|||
/* Restore original signal mask. */
|
||||
( void ) pthread_sigmask( SIG_SETMASK, &xSchedulerOriginalSignalMask, NULL );
|
||||
|
||||
prvDestroyThreadKey();
|
||||
|
||||
return 0;
|
||||
}
|
||||
/*-----------------------------------------------------------*/
|
||||
|
|
Loading…
Reference in a new issue