]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: receiver: define a flag for local accept
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 19 Jan 2022 10:37:50 +0000 (11:37 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 26 Jan 2022 10:22:20 +0000 (11:22 +0100)
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.

include/haproxy/receiver-t.h
src/listener.c

index f7412dfeb8233795ff584c34917bb5e4c1d76d6d..7c04d4871416f821dd3ca9306f7b5e89dbcf2bb3 100644 (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 */
index c4be8dd0a02f02b9314f597b39030b359958d204..cb30dd23444a8bf53ae657a3d89f713f308a7c2f 100644 (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)) {