From b5e4738a1d6d393b181bc4b6f324d0c3fcc3daed Mon Sep 17 00:00:00 2001 From: deuce <> Date: Thu, 17 Nov 2005 04:41:35 +0000 Subject: [PATCH] If sigwait() fails due to EINTR, block and log the signal which caused the failure. --- src/sbbs3/sbbscon.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/sbbs3/sbbscon.c b/src/sbbs3/sbbscon.c index e8d13bab8f..16c2a7f321 100644 --- a/src/sbbs3/sbbscon.c +++ b/src/sbbs3/sbbscon.c @@ -934,6 +934,13 @@ static void handle_sigs(void) while(1) { if((i=sigwait(&sigs,&sig))!=0) { /* wait here until signaled */ lprintf(LOG_ERR," !sigwait FAILURE (%d)", i); + if(i==EINTR) { + sigset_t moresigs; + lprintf(LOG_ERR," Adding signal %d to blocked set",i); + memcpy(&moresigs, &sigs, sizeof(moresigs)); + sigaddset(&sigs, sig); + pthread_sigmask(SIG_BLOCK,&moresigs,NULL); + } continue; } lprintf(LOG_NOTICE," Got signal (%d)", sig); -- GitLab