MINOR: receiver: define a flag for local accept

This flag is named RX_F_LOCAL_ACCEPT. It will be activated for special
receivers where connection balancing to threads is already handle
outside of listener_accept, such as with QUIC listeners.
This commit is contained in:
Amaury Denoyelle 2022-01-19 11:37:50 +01:00
parent 4b40f19f92
commit 7f7713d6ef
2 changed files with 5 additions and 0 deletions

View File

@ -33,6 +33,7 @@
#define RX_F_BOUND 0x00000001 /* receiver already bound */
#define RX_F_INHERITED 0x00000002 /* inherited FD from the parent process (fd@) */
#define RX_F_MWORKER 0x00000004 /* keep the FD open in the master but close it in the children */
#define RX_F_LOCAL_ACCEPT 0x00000008 /* do not use a tasklet for accept, connections will be accepted on the current thread */
/* Bit values for rx_settings->options */
#define RX_O_FOREIGN 0x00000001 /* receives on foreign addresses */

View File

@ -953,6 +953,9 @@ void listener_accept(struct listener *l)
#if defined(USE_THREAD)
if (l->rx.flags & RX_F_LOCAL_ACCEPT)
goto local_accept;
mask = thread_mask(l->rx.bind_thread) & all_threads_mask;
if (atleast2(mask) && (global.tune.options & GTUNE_LISTENER_MQ) && !stopping) {
struct accept_queue_ring *ring;
@ -1066,6 +1069,7 @@ void listener_accept(struct listener *l)
}
#endif // USE_THREAD
local_accept:
_HA_ATOMIC_INC(&l->thr_conn[tid]);
ret = l->accept(cli_conn);
if (unlikely(ret <= 0)) {