]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: listener: Bind listeners on a thread subset if specified
authorChristopher Faulet <cfaulet@haproxy.com>
Fri, 24 Nov 2017 09:08:09 +0000 (10:08 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 24 Nov 2017 14:38:50 +0000 (15:38 +0100)
If a "process" option with a thread set is used on the bind line, we use the
corresponding bitmask when the listener's FD is created.

src/proto_tcp.c
src/proto_uxst.c

index 5badda7e09f4948bb177dfd6222bc6e5c9e0cd6d..606c3c5e000d16eb8845ab4dae6ef5e02eeee59a 100644 (file)
@@ -1107,7 +1107,10 @@ int tcp_bind_listener(struct listener *listener, char *errmsg, int errlen)
 
        fdtab[fd].owner = listener; /* reference the listener instead of a task */
        fdtab[fd].iocb = listener->proto->accept;
-       fd_insert(fd, MAX_THREADS_MASK);
+       if (listener->bind_conf->bind_thread[relative_pid-1])
+               fd_insert(fd, listener->bind_conf->bind_thread[relative_pid-1]);
+       else
+               fd_insert(fd, MAX_THREADS_MASK);
 
  tcp_return:
        if (msg && errlen) {
index fc4a5197169b3c4c1c9c1f8995a68eaaa9a0eeb8..3b353c61a121f64e3a7912acff6b598aaf9eca95 100644 (file)
@@ -334,7 +334,10 @@ static int uxst_bind_listener(struct listener *listener, char *errmsg, int errle
        /* the function for the accept() event */
        fdtab[fd].iocb = listener->proto->accept;
        fdtab[fd].owner = listener; /* reference the listener instead of a task */
-       fd_insert(fd, MAX_THREADS_MASK);
+       if (listener->bind_conf->bind_thread[relative_pid-1])
+               fd_insert(fd, listener->bind_conf->bind_thread[relative_pid-1]);
+       else
+               fd_insert(fd, MAX_THREADS_MASK);
        return err;
 
  err_rename: