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