diff --git a/mbtask/mbtask.c b/mbtask/mbtask.c index 0b189b16..75fb09b7 100644 --- a/mbtask/mbtask.c +++ b/mbtask/mbtask.c @@ -1007,12 +1007,25 @@ void *scheduler(void) #if defined(__linux__) FILE *fp; #endif - int call_work = 0; + int call_work = 0, rc; static int call_entry = MAXTASKS; double loadavg[3]; pp_list *tpl; + sigset_t sigset, oldset; Syslog('+', "Starting scheduler thread with pid %d", (int)getpid()); + rc = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); + if (rc) + Syslog('+', "pthread_setcancelstate(PTHREAD_CANCEL_DISABLE) rc=%d", rc); + + rc = sigfillset(&sigset); + if (rc) + Syslog('+', "sigfillset() rc=%d", rc); + rc = pthread_sigmask(SIG_SETMASK, &sigset, &oldset); + if (rc) + Syslog('+', "pthread_sigmask(SIG_SETMASK) rc=%d", rc); + + sched_run = TRUE; pw = getpwuid(getuid()); diff --git a/mbtask/ping.c b/mbtask/ping.c index a54e3c3a..d370e081 100644 --- a/mbtask/ping.c +++ b/mbtask/ping.c @@ -338,8 +338,20 @@ void *ping_thread(void) static char pingaddress[41]; static time_t pingsend; time_t now; + sigset_t sigset, oldset; Syslog('+', "Starting ping thread with pid %d", (int)getpid()); + rc = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); + if (rc) + Syslog('+', "pthread_setcancelstate(PTHREAD_CANCEL_DISABLE) rc=%d", rc); + + rc = sigfillset(&sigset); + if (rc) + Syslog('+', "sigfillset() rc=%d", rc); + rc = pthread_sigmask(SIG_SETMASK, &sigset, &oldset); + if (rc) + Syslog('+', "pthread_sigmask(SIG_SETMASK) rc=%d", rc); + pingresult[1] = pingresult[2] = FALSE; pingnr = 2; internet = FALSE; diff --git a/mbtask/taskcomm.c b/mbtask/taskcomm.c index 3c604168..16cb5099 100644 --- a/mbtask/taskcomm.c +++ b/mbtask/taskcomm.c @@ -583,8 +583,20 @@ void *cmd_thread(void) int rlen, rc; struct pollfd pfd; static char buf[2048]; + sigset_t sigset, oldset; Syslog('+', "Starting cmd thread with pid %d", (int)getpid()); + rc = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); + if (rc) + Syslog('+', "pthread_setcancelstate(PTHREAD_CANCEL_DISABLE) rc=%d", rc); + + rc = sigfillset(&sigset); + if (rc) + Syslog('+', "sigfillset() rc=%d", rc); + rc = pthread_sigmask(SIG_SETMASK, &sigset, &oldset); + if (rc) + Syslog('+', "pthread_sigmask(SIG_SETMASK) rc=%d", rc); + cmd_run = TRUE; while (! T_Shutdown) {