]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: protocol: do not call proto->bind_all() anymore
authorWilly Tarreau <w@1wt.eu>
Tue, 1 Sep 2020 16:48:35 +0000 (18:48 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 2 Sep 2020 08:19:41 +0000 (10:19 +0200)
All protocols only iterate over their own listeners list and start
the listeners using a direct call to their ->bind() function. This
code duplication doesn't make sense and prevents us from centralizing
the startup error handling. Worse, it's not even symmetric because
there's an unbind_all_listeners() function common to all protocols
without any equivalent for binding. Let's start by directly calling
each protocol's bind() function from protocol_bind_all().

src/protocol.c

index af13f42e78fea7fd6c5c82c48149278b2c258e14..faa634192dfe02adaf4abca0d039faa50c0ea37f 100644 (file)
@@ -16,6 +16,7 @@
 #include <haproxy/api.h>
 #include <haproxy/errors.h>
 #include <haproxy/list.h>
+#include <haproxy/listener.h>
 #include <haproxy/protocol.h>
 #include <haproxy/tools.h>
 
@@ -57,14 +58,15 @@ void protocol_unregister(struct protocol *proto)
 int protocol_bind_all(char *errmsg, int errlen)
 {
        struct protocol *proto;
+       struct listener *listener;
        int err;
 
        err = 0;
        HA_SPIN_LOCK(PROTO_LOCK, &proto_lock);
        list_for_each_entry(proto, &protocols, list) {
-               if (proto->bind_all) {
-                       err |= proto->bind_all(proto, errmsg, errlen);
-                       if ( err & ERR_ABORT )
+               list_for_each_entry(listener, &proto->listeners, proto_list) {
+                       err |= proto->bind(listener, errmsg, errlen);
+                       if (err & ERR_ABORT)
                                break;
                }
        }