MINOR: listeners: count unstoppable jobs on creation, not deletion

We have to count unstoppable jobs which correspond to worker sockpairs, in
order to know when to count. However the way it's currently done is quite
awkward because these are counted when stopping making the stop mechanism
non-idempotent. This is definitely something we want to fix before stopping
by protocol or our listeners count will quickly go wrong. Now they are
counted when the listeners are created.
This commit is contained in:
Willy Tarreau 2020-10-09 18:25:14 +02:00
parent b4c083f5bf
commit 455585e3cd
2 changed files with 2 additions and 3 deletions

View File

@ -2669,6 +2669,7 @@ int mworker_cli_sockpair_new(struct mworker_proc *mworker_proc, int proc)
l->accept = session_accept_fd;
l->default_target = global.stats_fe->default_target;
l->options |= (LI_O_UNLIMITED | LI_O_NOSTOP);
HA_ATOMIC_ADD(&unstoppable_jobs, 1);
/* it's a sockpair but we don't want to keep the fd in the master */
l->rx.flags &= ~RX_F_INHERITED;
l->nice = -64; /* we want to boost priority for local stats */

View File

@ -1301,10 +1301,8 @@ void stop_proxy(struct proxy *p)
HA_SPIN_LOCK(PROXY_LOCK, &p->lock);
list_for_each_entry(l, &p->conf.listeners, by_fe) {
if (l->options & LI_O_NOSTOP) {
HA_ATOMIC_ADD(&unstoppable_jobs, 1);
if (l->options & LI_O_NOSTOP)
continue;
}
/* There are several cases where we must not close an FD:
* - we're starting up and we have socket transfers enabled;