MINOR: fd: move .exported into fdtab[].state

No need to keep this flag apart any more, let's merge it into the global
state.
This commit is contained in:
Willy Tarreau 2021-04-06 18:09:06 +02:00
parent 5362bc9044
commit 9063a660cc
6 changed files with 6 additions and 7 deletions

View File

@ -67,6 +67,7 @@ enum {
#define FD_CLONED_BIT 17 /* cloned socket, requires EPOLL_CTL_DEL on close */ #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_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_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 */ /* and flag values */
@ -105,6 +106,7 @@ enum {
#define FD_CLONED (1U << FD_CLONED_BIT) #define FD_CLONED (1U << FD_CLONED_BIT)
#define FD_INITIALIZED (1U << FD_INITIALIZED_BIT) #define FD_INITIALIZED (1U << FD_INITIALIZED_BIT)
#define FD_ET_POSSIBLE (1U << FD_ET_POSSIBLE_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 /* 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 * 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 (*iocb)(int fd); /* I/O handler */
void *owner; /* the connection or listener associated with this fd, NULL if closed */ 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 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 #ifdef DEBUG_FD
unsigned int event_count; /* number of events reported */ unsigned int event_count; /* number of events reported */
#endif #endif

View File

@ -433,7 +433,6 @@ static inline void fd_insert(int fd, void *owner, void (*iocb)(int fd), unsigned
fdtab[fd].owner = owner; fdtab[fd].owner = owner;
fdtab[fd].iocb = iocb; fdtab[fd].iocb = iocb;
fdtab[fd].state = 0; fdtab[fd].state = 0;
fdtab[fd].exported = 0;
#ifdef DEBUG_FD #ifdef DEBUG_FD
fdtab[fd].event_count = 0; fdtab[fd].event_count = 0;
#endif #endif

View File

@ -1889,7 +1889,7 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr
* the caller know how much it should expect. * the caller know how much it should expect.
*/ */
for (cur_fd = 0;cur_fd < global.maxsock; cur_fd++) 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) if (tot_fd_nb == 0)
goto out; goto out;
@ -1933,7 +1933,7 @@ static int _getsocks(char **args, char *payload, struct appctx *appctx, void *pr
nb_queued = 0; nb_queued = 0;
iov.iov_base = tmpbuf; iov.iov_base = tmpbuf;
for (cur_fd = 0; cur_fd < global.maxsock; cur_fd++) { for (cur_fd = 0; cur_fd < global.maxsock; cur_fd++) {
if (!(fdtab[cur_fd].exported)) if (!(fdtab[cur_fd].state & FD_EXPORTED))
continue; continue;
ns_name = if_name = ""; ns_name = if_name = "";

View File

@ -320,7 +320,6 @@ void _fd_delete_orphan(int fd)
#endif #endif
fdinfo[fd].port_range = NULL; fdinfo[fd].port_range = NULL;
fdtab[fd].owner = NULL; fdtab[fd].owner = NULL;
fdtab[fd].exported = 0;
/* perform the close() call last as it's what unlocks the instant reuse /* perform the close() call last as it's what unlocks the instant reuse
* of this FD by any other thread. * of this FD by any other thread.
*/ */

View File

@ -395,7 +395,7 @@ int sock_inet_bind_receiver(struct receiver *rx, char **errmsg)
/* for now, all regularly bound TCP listeners are exportable */ /* for now, all regularly bound TCP listeners are exportable */
if (!(rx->flags & RX_F_INHERITED)) if (!(rx->flags & RX_F_INHERITED))
fdtab[fd].exported = 1; HA_ATOMIC_OR(&fdtab[fd].state, FD_EXPORTED);
bind_return: bind_return:
if (errmsg && *errmsg) { if (errmsg && *errmsg) {

View File

@ -289,7 +289,7 @@ int sock_unix_bind_receiver(struct receiver *rx, char **errmsg)
/* for now, all regularly bound TCP listeners are exportable */ /* for now, all regularly bound TCP listeners are exportable */
if (!(rx->flags & RX_F_INHERITED)) if (!(rx->flags & RX_F_INHERITED))
fdtab[fd].exported = 1; HA_ATOMIC_OR(&fdtab[fd].state, FD_EXPORTED);
return err; return err;