]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: config: simplify bind_proc processing using proc_mask()
authorWilly Tarreau <w@1wt.eu>
Sat, 2 Feb 2019 16:39:53 +0000 (17:39 +0100)
committerWilly Tarreau <w@1wt.eu>
Mon, 4 Feb 2019 04:09:16 +0000 (05:09 +0100)
At a number of places we used to have null tests on bind_proc for
listeners and proxies. Let's simplify all these tests by always
having the proper bits reported via proc_mask().

src/cfgparse.c
src/listener.c
src/proxy.c

index 441f4a6a0c4972e069ee0cbf8258808cf89abcd0..917fe0caea48bf02302d859f0ef2abc345e64366 100644 (file)
@@ -2286,10 +2286,7 @@ int check_config_validity()
 #endif
 
                        /* detect and address thread affinity inconsistencies */
-                       nbproc = 0;
-                       if (bind_conf->bind_proc)
-                               nbproc = my_ffsl(bind_conf->bind_proc) - 1;
-
+                       nbproc = my_ffsl(proc_mask(bind_conf->bind_proc)) - 1;
                        mask = bind_conf->bind_thread[nbproc];
                        if (mask && !(mask & all_threads_mask)) {
                                unsigned long new_mask = 0;
@@ -2311,9 +2308,7 @@ int check_config_validity()
                        if (!bind_conf->bind_proc)
                                continue;
 
-                       mask = all_proc_mask;
-                       if (curproxy->bind_proc)
-                               mask &= curproxy->bind_proc;
+                       mask = proc_mask(curproxy->bind_proc) & all_proc_mask;
                        /* mask cannot be null here thanks to the previous checks */
 
                        nbproc = my_popcountl(bind_conf->bind_proc);
@@ -3550,12 +3545,8 @@ out_uri_auth_compat:
                list_for_each_entry(bind_conf, &global.stats_fe->conf.bind, by_fe) {
                        unsigned long mask;
 
-                       mask = all_proc_mask;
-                       if (global.stats_fe->bind_proc)
-                               mask &= global.stats_fe->bind_proc;
-
-                       if (bind_conf->bind_proc)
-                               mask &= bind_conf->bind_proc;
+                       mask  = proc_mask(global.stats_fe->bind_proc) && all_proc_mask;
+                       mask &= proc_mask(bind_conf->bind_proc);
 
                        /* stop here if more than one process is used */
                        if (atleast2(mask))
@@ -3574,12 +3565,10 @@ out_uri_auth_compat:
                list_for_each_entry(bind_conf, &curproxy->conf.bind, by_fe) {
                        unsigned long mask;
 
-                       mask = bind_conf->bind_proc ? bind_conf->bind_proc : all_proc_mask;
+                       mask = proc_mask(bind_conf->bind_proc);
                        curproxy->bind_proc |= mask;
                }
-
-               if (!curproxy->bind_proc)
-                       curproxy->bind_proc = all_proc_mask;
+               curproxy->bind_proc = proc_mask(curproxy->bind_proc);
        }
 
        if (global.stats_fe) {
@@ -3589,8 +3578,7 @@ out_uri_auth_compat:
                        mask = bind_conf->bind_proc ? bind_conf->bind_proc : 0;
                        global.stats_fe->bind_proc |= mask;
                }
-               if (!global.stats_fe->bind_proc)
-                       global.stats_fe->bind_proc = all_proc_mask;
+               global.stats_fe->bind_proc = proc_mask(global.stats_fe->bind_proc);
        }
 
        /* propagate bindings from frontends to backends. Don't do it if there
@@ -3604,11 +3592,8 @@ out_uri_auth_compat:
        }
 
        /* Bind each unbound backend to all processes when not specified. */
-       for (curproxy = proxies_list; curproxy; curproxy = curproxy->next) {
-               if (curproxy->bind_proc)
-                       continue;
-               curproxy->bind_proc = all_proc_mask;
-       }
+       for (curproxy = proxies_list; curproxy; curproxy = curproxy->next)
+               curproxy->bind_proc = proc_mask(curproxy->bind_proc);
 
        /*******************************************************/
        /* At this step, all proxies have a non-null bind_proc */
index 40419d5625e13bd2f8b1474ca76ae40ee5087ef9..cb8cbda1d2fc70b0286d1923a72d00e42fabf6f6 100644 (file)
@@ -63,8 +63,7 @@ static void enable_listener(struct listener *listener)
        HA_SPIN_LOCK(LISTENER_LOCK, &listener->lock);
        if (listener->state == LI_LISTEN) {
                if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) &&
-                   listener->bind_conf->bind_proc &&
-                   !(listener->bind_conf->bind_proc & pid_bit)) {
+                   !(proc_mask(listener->bind_conf->bind_proc) & pid_bit)) {
                        /* we don't want to enable this listener and don't
                         * want any fd event to reach it.
                         */
@@ -173,8 +172,7 @@ static int __resume_listener(struct listener *l)
        HA_SPIN_LOCK(LISTENER_LOCK, &l->lock);
 
        if ((global.mode & (MODE_DAEMON | MODE_MWORKER)) &&
-           l->bind_conf->bind_proc &&
-           !(l->bind_conf->bind_proc & pid_bit))
+           !(proc_mask(l->bind_conf->bind_proc) & pid_bit))
                goto end;
 
        if (l->state == LI_ASSIGNED) {
index 7721008b04f3d1cc2d218c81c46b7fdb65534eaa..78e099ee98f2ecb469e7ecbed5ecab1f9fa0a120 100644 (file)
@@ -1598,7 +1598,7 @@ static int dump_servers_state(struct stream_interface *si, struct buffer *buf)
        char *srvrecord;
 
        /* we don't want to report any state if the backend is not enabled on this process */
-       if (px->bind_proc && !(px->bind_proc & pid_bit))
+       if (!(proc_mask(px->bind_proc) & pid_bit))
                return 1;
 
        if (!appctx->ctx.cli.p1)
@@ -1719,7 +1719,7 @@ static int cli_io_handler_show_backend(struct appctx *appctx)
                        continue;
 
                /* we don't want to list a backend which is bound to this process */
-               if (curproxy->bind_proc && !(curproxy->bind_proc & pid_bit))
+               if (!(proc_mask(curproxy->bind_proc) & pid_bit))
                        continue;
 
                chunk_appendf(&trash, "%s\n", curproxy->id);