@@ -202,6 +202,33 @@ void vPortStartFirstTask( void )
202
202
}
203
203
/*-----------------------------------------------------------*/
204
204
205
+ /*
206
+ * Clear a signal that is pending for the calling thread.
207
+ */
208
+ void prvClearPendingSignal ( int sig )
209
+ {
210
+ sigset_t set , oldset ;
211
+
212
+ /* Block the signal */
213
+ sigemptyset ( & set );
214
+ sigaddset ( & set , sig );
215
+ pthread_sigmask ( SIG_BLOCK , & set , & oldset );
216
+
217
+ /* Check if signal is pending */
218
+ sigpending ( & set );
219
+
220
+ if ( sigismember ( & set , sig ) )
221
+ {
222
+ int signum ;
223
+ /* Wait for and remove signal */
224
+ sigwait ( & set , & signum );
225
+ }
226
+
227
+ /* Restore the original signal mask */
228
+ pthread_sigmask ( SIG_SETMASK , & oldset , NULL );
229
+ }
230
+ /*-----------------------------------------------------------*/
231
+
205
232
/*
206
233
* See header file for description.
207
234
*/
@@ -250,6 +277,9 @@ BaseType_t xPortStartScheduler( void )
250
277
hSigSetupThread = PTHREAD_ONCE_INIT ;
251
278
#endif /* __APPLE__*/
252
279
280
+ // Clear SIG_RESUME (SIGUSR1), because it might have fired again while we were shutting things down.
281
+ prvClearPendingSignal ( SIG_RESUME );
282
+
253
283
/* Restore original signal mask. */
254
284
( void ) pthread_sigmask ( SIG_SETMASK , & xSchedulerOriginalSignalMask , NULL );
255
285
0 commit comments