Clear SIGRESUME (SIGUSR1) when exiting xPortStartScheduler

This commit is contained in:
John Boiles 2025-01-17 16:48:44 -08:00
parent 78e0cc778a
commit 2fcb0ad63f

View file

@ -202,6 +202,33 @@ void vPortStartFirstTask( void )
}
/*-----------------------------------------------------------*/
/*
* Clear a signal that is pending for the calling thread.
*/
void prvClearPendingSignal( int sig )
{
sigset_t set, oldset;
/* Block the signal */
sigemptyset( &set );
sigaddset( &set, sig );
pthread_sigmask( SIG_BLOCK, &set, &oldset );
/* Check if signal is pending */
sigpending( &set );
if( sigismember( &set, sig ) )
{
int signum;
/* Wait for and remove signal */
sigwait( &set, &signum );
}
/* Restore the original signal mask */
pthread_sigmask( SIG_SETMASK, &oldset, NULL );
}
/*-----------------------------------------------------------*/
/*
* See header file for description.
*/
@ -250,6 +277,9 @@ BaseType_t xPortStartScheduler( void )
hSigSetupThread = PTHREAD_ONCE_INIT;
#endif /* __APPLE__*/
// Clear SIG_RESUME (SIGUSR1), because it might have fired again while we were shutting things down.
prvClearPendingSignal( SIG_RESUME );
/* Restore original signal mask. */
( void ) pthread_sigmask( SIG_SETMASK, &xSchedulerOriginalSignalMask, NULL );