diff --git a/mbtask/calllist.c b/mbtask/calllist.c index a1b9e439..c9cf6f96 100644 --- a/mbtask/calllist.c +++ b/mbtask/calllist.c @@ -84,9 +84,8 @@ int check_calllist(void) if (pots_calls || isdn_calls || inet_calls) { call_work = 0; for (tmp = alist; tmp; tmp = tmp->next) { - if (((tmp->callmode == CM_INET) && TCFG.max_tcp) || - ((tmp->callmode == CM_ISDN) && TCFG.max_isdn) || - ((tmp->callmode == CM_POTS) && TCFG.max_pots)) { + if (((tmp->callmode == CM_INET) && TCFG.max_tcp && internet) || + ((tmp->callmode == CM_ISDN) && TCFG.max_isdn) || ((tmp->callmode == CM_POTS) && TCFG.max_pots)) { call_work++; /* diff --git a/mbtask/mbtask.c b/mbtask/mbtask.c index 357c2e8e..26847921 100644 --- a/mbtask/mbtask.c +++ b/mbtask/mbtask.c @@ -92,6 +92,7 @@ int tflags = FALSE; /* if nodes with Txx */ extern int nxt_hour; /* Next event hour */ extern int nxt_min; /* Next event minute */ extern _alist_l *alist; /* Nodes to call list */ +int rescan = FALSE; /* Master rescan flag */ extern int pots_calls; extern int isdn_calls; extern int inet_calls; @@ -563,7 +564,7 @@ int runtasktype(int tasktype) */ int checktasks(int onsig) { - int i, j, rc, count = 0, first = TRUE, status, do_outstat = FALSE; + int i, j, rc, count = 0, first = TRUE, status; for (i = 0; i < MAXTASKS; i++) { if (strlen(task[i].name)) { @@ -578,8 +579,11 @@ int checktasks(int onsig) task[i].rc = wait4(task[i].pid, &status, WNOHANG | WUNTRACED, NULL); if (task[i].rc) { task[i].running = FALSE; + /* + * If a mailer call is finished, set the global rescan flag. + */ if (task[i].tasktype == CM_POTS || task[i].tasktype == CM_ISDN || task[i].tasktype == CM_INET) - do_outstat = TRUE; + rescan = TRUE; ptimer = PAUSETIME; } @@ -635,6 +639,7 @@ int checktasks(int onsig) if (calllist[j].taskpid == task[i].pid) { calllist[j].calling = FALSE; calllist[j].taskpid = 0; + rescan = TRUE; } } memset(&task[i], 0, sizeof(onetask)); @@ -642,11 +647,6 @@ int checktasks(int onsig) } } - if (do_outstat) { - outstat(); - check_calllist(); - } - return count; } @@ -843,7 +843,7 @@ void scheduler(void) FILE *fp; #endif struct pollfd pfd; - int call_work; + int call_work = 0; static int call_entry = MAXTASKS; double loadavg[3]; @@ -1120,10 +1120,11 @@ void scheduler(void) /* * Update outbound status if needed. */ - if (s_scanout) { + if (rescan) { + rescan = FALSE; outstat(); + call_work = check_calllist(); } - call_work = check_calllist(); /* * Launch the systems to call, start one system each time. @@ -1183,7 +1184,7 @@ void scheduler(void) if (calllist[call_entry].taskpid) calllist[call_entry].calling = TRUE; running = checktasks(0); - check_calllist(); + rescan = TRUE; free(cmd); cmd = NULL; } diff --git a/mbtask/outstat.c b/mbtask/outstat.c index c3aeb098..881e0ea2 100644 --- a/mbtask/outstat.c +++ b/mbtask/outstat.c @@ -78,7 +78,7 @@ int load_node(fidoaddr n) (n.node == nodes.Aka[i].node) && (n.point == nodes.Aka[i].point)) { fclose(fp); free(temp); - tasklog('-' , "Node record %d, aka nr %d", j, i+1); +// tasklog('-' , "Node record %d, aka nr %d", j, i+1); return TRUE; } } @@ -227,8 +227,8 @@ int outstat() } rc = load_node(tmp->addr); - tasklog('o', "Load node %s rc=%s, NoCall=%s, NoTCP=%s", ascfnode(tmp->addr, 0x0f), rc?"true":"false", - nodes.NoCall?"True":"False", nodes.NoTCP?"True":"False"); +// tasklog('o', "Load node %s rc=%s, NoCall=%s, NoTCP=%s", ascfnode(tmp->addr, 0x0f), rc?"true":"false", +// nodes.NoCall?"True":"False", nodes.NoTCP?"True":"False"); /* * Zone Mail Hours, only use Fidonet Hours. @@ -303,7 +303,7 @@ int outstat() T_window = TRUE; } } - tasklog('o', "T_window=%s, iszmh=%s", T_window?"true":"false", iszmh?"true":"false"); +// tasklog('o', "T_window=%s, iszmh=%s", T_window?"true":"false", iszmh?"true":"false"); strcpy(flstr,"...... ... .."); /* diff --git a/mbtask/ping.c b/mbtask/ping.c index 69895c14..98dcd687 100644 --- a/mbtask/ping.c +++ b/mbtask/ping.c @@ -45,6 +45,7 @@ extern struct taskrec TCFG; /* Task config record */ int ping_isocket; /* Ping socket */ int icmp_errs = 0; /* ICMP error counter */ extern int internet; /* Internet is down */ +extern int rescan; /* Master rescan flag */ int pingstate = P_INIT; /* Ping state */ int pingnr = 1; /* Ping #, 1 or 2 */ int pingresult[2]; /* Ping results */ @@ -331,6 +332,7 @@ void check_ping(void) internet = FALSE; sem_set((char *)"scanout", TRUE); RemoveSema((char *)"is_inet"); + rescan = TRUE; } } else { if (!internet) { @@ -338,6 +340,7 @@ void check_ping(void) internet = TRUE; sem_set((char *)"scanout", TRUE); CreateSema((char *)"is_inet"); + rescan = TRUE; } icmp_errs = 0; } diff --git a/mbtask/ports.c b/mbtask/ports.c index b527fb46..d1fd6def 100644 --- a/mbtask/ports.c +++ b/mbtask/ports.c @@ -49,6 +49,7 @@ extern char ttyfn[]; /* TTY file name */ extern time_t tty_time; /* TTY update time */ +extern int rescan; /* Master rescan flag */ pp_list *pl = NULL; /* Portlist */ @@ -150,7 +151,8 @@ void load_ports() /* - * Check status of all modem/ISDN ports + * Check status of all modem/ISDN ports. + * If something is changed set the master rescan flag. */ void check_ports(void) { @@ -167,6 +169,10 @@ void check_ports(void) if (tpl->locked) { tpl->locked = 0; tasklog('+', "Port %s is now free", tpl->tty); + /* + * Good, set master rescan flag + */ + rescan = TRUE; } } else { fscanf(lf, "%d", &tmppid); @@ -175,10 +181,12 @@ void check_ports(void) if (kill(rempid, 0) && (errno == ESRCH)) { tasklog('+', "Stale lockfile for %s, unlink", tpl->tty); unlink(lckname); + rescan = TRUE; } else { if (!tpl->locked) { tpl->locked = rempid; tasklog('+', "Port %s locked, pid %d", tpl->tty, rempid); + rescan = TRUE; } } } diff --git a/mbtask/taskstat.c b/mbtask/taskstat.c index 03ed442a..3a428ca0 100644 --- a/mbtask/taskstat.c +++ b/mbtask/taskstat.c @@ -51,6 +51,7 @@ int s_bbsopen = FALSE; int s_do_inet = FALSE; extern int UPSalarm; extern int ptimer; +extern int rescan; @@ -340,6 +341,8 @@ int sem_set(char *sem, int value) if (!strcmp(sem, "scanout")) { s_scanout = value; + if (value) + rescan = TRUE; } else if (!strcmp(sem, "mailout")) { s_mailout = value; } else if (!strcmp(sem, "mailin")) {