From fb927af2bdf1e4d1d939d5ebfa97a793135ec911 Mon Sep 17 00:00:00 2001 From: Michiel Broek Date: Wed, 24 Dec 2003 12:00:00 +0000 Subject: [PATCH] Finished mbtask threads --- mbtask/mbtask.c | 43 +++++++++++++++++++++---------------------- mbtask/ping.c | 2 +- mbtask/taskcomm.c | 6 +++--- 3 files changed, 25 insertions(+), 26 deletions(-) diff --git a/mbtask/mbtask.c b/mbtask/mbtask.c index 889c8c0e..4e4c5c2a 100644 --- a/mbtask/mbtask.c +++ b/mbtask/mbtask.c @@ -658,11 +658,9 @@ int checktasks(int onsig) */ void start_shutdown(int onsig) { - Syslog('+', "Trigger shutdown on signal %s", SigName[onsig]); + Syslog('s', "Trigger shutdown on signal %s", SigName[onsig]); signal(onsig, SIG_IGN); G_Shutdown = TRUE; - if (nodaemon && (onsig == SIGINT)) - die(SIGTERM); } @@ -719,8 +717,7 @@ void die(int onsig) * Now stop the threads */ T_Shutdown = TRUE; - if (cmd_run || ping_run || sched_run) - Syslog('+', "Waiting for threads to stop"); + Syslog('+', "Signal all threads to stop"); /* * Wait at most 2 seconds for the threads, internal they are @@ -730,6 +727,7 @@ void die(int onsig) while ((cmd_run || ping_run || sched_run) && (time(NULL) < now)) { sleep(1); } + Syslog('+', "All threads stopped"); /* * Free memory @@ -931,7 +929,6 @@ void start_scheduler(void) struct passwd *pw; char *cmd = NULL; int rc; - pthread_attr_t attr; InitFidonet(); @@ -953,7 +950,7 @@ void start_scheduler(void) * Setup UNIX Datagram socket */ if ((sock = socket(AF_UNIX, SOCK_DGRAM, 0)) < 0) { - Syslog('?', "$Can't create socket"); + WriteError("$Can't create socket"); die(MBERR_INIT_ERROR); } @@ -964,7 +961,7 @@ void start_scheduler(void) if (bind(sock, (struct sockaddr *)&servaddr, sizeof(servaddr)) < 0) { close(sock); sock = -1; - Syslog('?', "$Can't bind socket %s", spath); + WriteError("$Can't bind socket %s", spath); die(MBERR_INIT_ERROR); } @@ -986,22 +983,24 @@ void start_scheduler(void) initnl(); sem_set((char *)"scanout", TRUE); if (!TCFG.max_tcp && !pots_lines && !isdn_lines) { - Syslog('?', "ERROR: this system cannot connect to other systems, check setup"); + Syslog('?', "WARNING: this system cannot connect to other systems, check setup"); } /* - * Install threads + * Install the threads that do the real work. */ - pthread_attr_init(&attr); - pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); - rc = pthread_create(&p_thread[0], NULL, (void (*))ping_thread, NULL); - Syslog('l', "pthread_create ping_thread rc=%d", rc); - rc = pthread_create(&p_thread[1], NULL, (void (*))cmd_thread, NULL); - Syslog('l', "pthread_create cmd_thread rc=%d", rc); - rc = pthread_create(&p_thread[2], NULL, (void (*))scheduler, NULL); - Syslog('l', "pthread_create scheduler rc=%d", rc); - pthread_attr_destroy(&attr); - Syslog('+', "All threads installed"); + if ((rc = pthread_create(&p_thread[0], NULL, (void (*))ping_thread, NULL))) { + WriteError("$pthread_create ping_thread rc=%d", rc); + die(SIGTERM); + } else if ((rc = pthread_create(&p_thread[1], NULL, (void (*))cmd_thread, NULL))) { + WriteError("$pthread_create cmd_thread rc=%d", rc); + die(SIGTERM); + } else if ((rc = pthread_create(&p_thread[2], NULL, (void (*))scheduler, NULL))) { + WriteError("$pthread_create scheduler rc=%d", rc); + die(SIGTERM); + } else { + Syslog('+', "All threads installed"); + } /* * Sleep until we die @@ -1034,7 +1033,7 @@ void *scheduler(void) double loadavg[3]; pp_list *tpl; - Syslog('+', "Starting scheduler thread with pid %d", (int)getpid()); + Syslog('+', "Starting scheduler thread"); sched_run = TRUE; pw = getpwuid(getuid()); @@ -1471,7 +1470,7 @@ int main(int argc, char **argv) * For debugging, run in foreground mode */ mypid = getpid(); - scheduler(); + start_scheduler(); } else { /* * Server initialization is complete. Now we can fork the diff --git a/mbtask/ping.c b/mbtask/ping.c index a54e3c3a..de151db5 100644 --- a/mbtask/ping.c +++ b/mbtask/ping.c @@ -339,7 +339,7 @@ void *ping_thread(void) static time_t pingsend; time_t now; - Syslog('+', "Starting ping thread with pid %d", (int)getpid()); + Syslog('+', "Starting ping thread"); pingresult[1] = pingresult[2] = FALSE; pingnr = 2; internet = FALSE; diff --git a/mbtask/taskcomm.c b/mbtask/taskcomm.c index 3c604168..32948895 100644 --- a/mbtask/taskcomm.c +++ b/mbtask/taskcomm.c @@ -584,7 +584,7 @@ void *cmd_thread(void) struct pollfd pfd; static char buf[2048]; - Syslog('+', "Starting cmd thread with pid %d", (int)getpid()); + Syslog('+', "Starting cmd thread"); cmd_run = TRUE; while (! T_Shutdown) { @@ -601,9 +601,9 @@ void *cmd_thread(void) /* * Poll can be interrupted by a finished child so that's not a real error. */ -// if (errno != EINTR) { + if (errno != EINTR) { Syslog('?', "$poll() rc=%d sock=%d, events=%04x", rc, sock, pfd.revents); -// } + } } else if (rc) { if (pfd.revents & POLLIN) { /*