From 9063a660cc743d3cff76e23c9632522518c49227 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 6 Apr 2021 18:09:06 +0200 Subject: [PATCH] MINOR: fd: move .exported into fdtab[].state No need to keep this flag apart any more, let's merge it into the global state. --- include/haproxy/fd-t.h | 3 ++- include/haproxy/fd.h | 1 - src/cli.c | 4 ++-- src/fd.c | 1 - src/sock_inet.c | 2 +- src/sock_unix.c | 2 +- 6 files changed, 6 insertions(+), 7 deletions(-) diff --git a/include/haproxy/fd-t.h b/include/haproxy/fd-t.h index e60f3b5..9108b4e 100644 --- a/include/haproxy/fd-t.h +++ b/include/haproxy/fd-t.h @@ -67,6 +67,7 @@ enum { #define FD_CLONED_BIT 17 /* cloned socket, requires EPOLL_CTL_DEL on close */ #define FD_INITIALIZED_BIT 18 /* init phase was done (e.g. output pipe set non-blocking) */ #define FD_ET_POSSIBLE_BIT 19 /* edge-triggered is possible on this FD */ +#define FD_EXPORTED_BIT 20 /* FD is exported and must not be closed */ /* and flag values */ @@ -105,6 +106,7 @@ enum { #define FD_CLONED (1U << FD_CLONED_BIT) #define FD_INITIALIZED (1U << FD_INITIALIZED_BIT) #define FD_ET_POSSIBLE (1U << FD_ET_POSSIBLE_BIT) +#define FD_EXPORTED (1U << FD_EXPORTED_BIT) /* This is the value used to mark a file descriptor as dead. This value is * negative, this is important so that tests on fd < 0 properly match. It @@ -153,7 +155,6 @@ struct fdtab { void (*iocb)(int fd); /* I/O handler */ void *owner; /* the connection or listener associated with this fd, NULL if closed */ unsigned int state; /* FD state for read and write directions (FD_EV_*) + FD_POLL_* */ - unsigned char exported:1; /* 1 if the FD is exported and must not be closed */ #ifdef DEBUG_FD unsigned int event_count; /* number of events reported */ #endif diff --git a/include/haproxy/fd.h b/include/haproxy/fd.h index ba9bf8c..37c9ac5 100644 --- a/include/haproxy/fd.h +++ b/include/haproxy/fd.h @@ -433,7 +433,6 @@ static inline void fd_insert(int fd, void *owner, void (*iocb)(int fd), unsigned fdtab[fd].owner = owner; fdtab[fd].iocb = iocb; fdtab[fd].state = 0; - fdtab[fd].exported = 0; #ifdef DEBUG_FD fdtab[fd].event_count = 0; #endif diff --git a/src/cli.c b/src/cli.c index 08c35da..575a173 100644 --- a/src/cli.c +++ b/src/cli.c @@ -1889,7 +1889,7 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr * the caller know how much it should expect. */ for (cur_fd = 0;cur_fd < global.maxsock; cur_fd++) - tot_fd_nb += fdtab[cur_fd].exported; + tot_fd_nb += !!(fdtab[cur_fd].state & FD_EXPORTED); if (tot_fd_nb == 0) goto out; @@ -1933,7 +1933,7 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr nb_queued = 0; iov.iov_base = tmpbuf; for (cur_fd = 0; cur_fd < global.maxsock; cur_fd++) { - if (!(fdtab[cur_fd].exported)) + if (!(fdtab[cur_fd].state & FD_EXPORTED)) continue; ns_name = if_name = ""; diff --git a/src/fd.c b/src/fd.c index fe9db23..d63abbf 100644 --- a/src/fd.c +++ b/src/fd.c @@ -320,7 +320,6 @@ void _fd_delete_orphan(int fd) #endif fdinfo[fd].port_range = NULL; fdtab[fd].owner = NULL; - fdtab[fd].exported = 0; /* perform the close() call last as it's what unlocks the instant reuse * of this FD by any other thread. */ diff --git a/src/sock_inet.c b/src/sock_inet.c index ab881d8..fb69981 100644 --- a/src/sock_inet.c +++ b/src/sock_inet.c @@ -395,7 +395,7 @@ int sock_inet_bind_receiver(struct receiver *rx, char **errmsg) /* for now, all regularly bound TCP listeners are exportable */ if (!(rx->flags & RX_F_INHERITED)) - fdtab[fd].exported = 1; + HA_ATOMIC_OR(&fdtab[fd].state, FD_EXPORTED); bind_return: if (errmsg && *errmsg) { diff --git a/src/sock_unix.c b/src/sock_unix.c index 45631ac..9913f4f 100644 --- a/src/sock_unix.c +++ b/src/sock_unix.c @@ -289,7 +289,7 @@ int sock_unix_bind_receiver(struct receiver *rx, char **errmsg) /* for now, all regularly bound TCP listeners are exportable */ if (!(rx->flags & RX_F_INHERITED)) - fdtab[fd].exported = 1; + HA_ATOMIC_OR(&fdtab[fd].state, FD_EXPORTED); return err; -- 1.7.10.4