MINOR: listener: move the INHERITED flag down to the receiver

It's the receiver's FD that's inherited from the parent process, not
the listener's so the flag must move to the receiver so that appropriate
actions can be taken.
This commit is contained in:
Willy Tarreau 2020-09-01 15:41:59 +02:00
parent 0b9150155e
commit 43046fa4f4
8 changed files with 8 additions and 7 deletions

View File

@ -97,7 +97,7 @@ enum li_state {
#define LI_O_V6ONLY 0x0400 /* bind to IPv6 only on Linux >= 2.4.21 */
#define LI_O_V4V6 0x0800 /* bind to IPv4/IPv6 on Linux >= 2.4.21 */
#define LI_O_ACC_CIP 0x1000 /* find the proxied address in the NetScaler Client IP header */
#define LI_O_INHERITED 0x2000 /* inherited FD from the parent process (fd@) */
/* unused 0x2000 */
#define LI_O_MWORKER 0x4000 /* keep the FD open in the master but close it in the children */
#define LI_O_NOSTOP 0x8000 /* keep the listener active even after a soft stop */

View File

@ -31,6 +31,7 @@
/* Bit values for receiver->options */
#define RX_F_BOUND 0x00000001 /* receiver already bound */
#define RX_F_INHERITED 0x00000002 /* inherited FD from the parent process (fd@) */
/* All the settings that are used to configure a receiver */
struct rx_settings {

View File

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

View File

@ -574,7 +574,7 @@ int create_listeners(struct bind_conf *bc, const struct sockaddr_storage *ss,
proto->add(l, port);
if (inherited)
l->options |= LI_O_INHERITED;
l->rx.flags |= RX_F_INHERITED;
HA_SPIN_INIT(&l->lock);
_HA_ATOMIC_ADD(&jobs, 1);

View File

@ -426,7 +426,7 @@ void mworker_cleanlisteners()
/* unbind the listener but does not close if
the FD is inherited with fd@ from the parent
process */
if (l->options & LI_O_INHERITED)
if (l->rx.flags & RX_F_INHERITED)
unbind_listener_no_close(l);
else
unbind_listener(l);

View File

@ -777,7 +777,7 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen)
thread_mask(listener->rx.settings->bind_thread) & all_threads_mask);
/* for now, all regularly bound TCP listeners are exportable */
if (!(listener->options & LI_O_INHERITED))
if (!(listener->rx.flags & RX_F_INHERITED))
fdtab[fd].exported = 1;
tcp_return:

View File

@ -270,7 +270,7 @@ static int uxst_bind_listener(struct listener *listener, char *errmsg, int errle
thread_mask(listener->rx.settings->bind_thread) & all_threads_mask);
/* for now, all regularly bound UNIX listeners are exportable */
if (!(listener->options & LI_O_INHERITED))
if (!(listener->rx.flags & RX_F_INHERITED))
fdtab[fd].exported = 1;
return err;

View File

@ -1370,7 +1370,7 @@ void stop_proxy(struct proxy *p)
continue;
}
/* The master should not close an inherited FD */
if (master && (l->options & LI_O_INHERITED))
if (master && (l->rx.flags & RX_F_INHERITED))
unbind_listener_no_close(l);
else
unbind_listener(l);