extern int pid; /* current process id */
extern int relative_pid; /* process id starting at 1 */
extern int actconn; /* # of active sessions */
-extern int listeners;
+extern int listeners;
+extern int jobs; /* # of active jobs */
extern char trash[BUFSIZE];
extern char *swap_buffer;
extern int nb_oldpids; /* contains the number of old pids found */
tcpv4_add_listener(l);
}
+ jobs++;
listeners++;
} /* end for(port) */
} /* end while(next) */
/*********************************************************************/
int stopping; /* non zero means stopping in progress */
+int jobs = 0; /* number of active jobs (conns, listeners, active tasks, ...) */
/* Here we store informations about the pids of the processes we may pause
* or kill. We will send them a signal every 10 ms until we can bind to all
* numbers of proxies. */
maintain_proxies(&next);
- /* stop when there's no connection left and we don't allow them anymore */
- if (!actconn && listeners == 0)
+ /* stop when there's nothing left to do */
+ if (jobs == 0)
break;
/* The poller will ensure it returns around <next> */
if (l->state >= LI_ASSIGNED) {
delete_listener(l);
listeners--;
+ jobs--;
}
}
p->state = PR_STSTOPPED;
if (s->flags & SN_BE_ASSIGNED)
s->be->beconn--;
actconn--;
+ jobs--;
s->listener->nbconn--;
if (s->listener->state == LI_FULL &&
s->listener->nbconn < s->listener->maxconn) {
goto out_close;
}
+ jobs++;
actconn++;
totalconn++;
l->nbconn++;
EV_FD_CLR(fd, DIR_RD);
p->state = PR_STIDLE;
}
+ jobs--;
actconn--;
l->nbconn--;
goto out_close;
}
else if (unlikely(ret == 0)) {
/* ignore this connection */
+ jobs--;
actconn--;
l->nbconn--;
close(cfd);