MINOR: listeners: make listeners count consistent with reality

Some places call delete_listener() then decrement the number of
listeners and jobs. At least one other place calls delete_listener()
without doing so, but since it's in deinit(), it's harmless and cannot
risk to cause zombie processes to survive. Given that the number of
listeners and jobs is incremented when creating the listeners, it's
much more logical to symmetrically decrement them when deleting such
listeners.
This commit is contained in:
Willy Tarreau 2017-09-15 08:18:11 +02:00
parent 0de59fd53a
commit 2cc5bae0b8
3 changed files with 6 additions and 7 deletions

View File

@ -170,7 +170,7 @@ 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 jobs; /* # of active jobs */
extern int jobs; /* # of active jobs (listeners, sessions, open devices) */
extern struct chunk trash;
extern int nb_oldpids; /* contains the number of old pids found */
extern const int zero;

View File

@ -343,8 +343,9 @@ int create_listeners(struct bind_conf *bc, const struct sockaddr_storage *ss,
/* Delete a listener from its protocol's list of listeners. The listener's
* state is automatically updated from LI_ASSIGNED to LI_INIT. The protocol's
* number of listeners is updated. Note that the listener must have previously
* been unbound. This is the generic function to use to remove a listener.
* number of listeners is updated, as well as the global number of listeners
* and jobs. Note that the listener must have previously been unbound. This
* is the generic function to use to remove a listener.
*/
void delete_listener(struct listener *listener)
{
@ -353,6 +354,8 @@ void delete_listener(struct listener *listener)
listener->state = LI_INIT;
LIST_DEL(&listener->proto_list);
listener->proto->nb_listeners--;
listeners--;
jobs--;
}
/* This function is called on a read event from a listening socket, corresponding

View File

@ -1080,8 +1080,6 @@ void zombify_proxy(struct proxy *p)
unbind_listener_no_close(l);
if (l->state >= LI_ASSIGNED) {
delete_listener(l);
listeners--;
jobs--;
}
/*
* Pretend we're still up and running so that the fd
@ -1120,8 +1118,6 @@ void stop_proxy(struct proxy *p)
unbind_listener(l);
if (l->state >= LI_ASSIGNED) {
delete_listener(l);
listeners--;
jobs--;
}
}
p->state = PR_STSTOPPED;