]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
Always create a endpoint in network_listen_fd
authorVicky Shrestha <vicky@geeks.net.np>
Wed, 17 Jan 2018 05:10:15 +0000 (21:10 -0800)
committerPetr Špaček <petr.spacek@nic.cz>
Thu, 12 Apr 2018 10:05:05 +0000 (12:05 +0200)
There is no need to check for unique addr+port for FDs passed
by a supervisor process like systemd.

daemon/network.c

index b3564567f4d299c3eb17bc173a9e477aba83c7a6..4a047ab664cd89325ef1b7549e4655f1ce923e68 100644 (file)
@@ -265,23 +265,17 @@ int network_listen_fd(struct network *net, int fd, bool use_tls)
        } else {
                return kr_error(EAFNOSUPPORT);
        }
-       /* Fetch or create endpoint for this fd */
-       size_t index = 0;
-       endpoint_array_t *ep_array = network_get(net, addr_str, port, &index);
-       if (!ep_array) {
-               struct endpoint *ep = malloc(sizeof(*ep));
-               memset(ep, 0, sizeof(*ep));
-               ep->flags = NET_DOWN;
-               ep->port = port;
-               ret = insert_endpoint(net, addr_str, ep);
-               if (ret != 0) {
-                       return ret;
-               }
-               ep_array = network_get(net, addr_str, port, &index);
+
+       /* always create endpoint for supervisor supplied fd
+        * even if addr+port is not unique */
+       struct endpoint *ep = malloc(sizeof(*ep));
+       memset(ep, 0, sizeof(*ep));
+       ep->flags = NET_DOWN;
+       ep->port = port;
+       ret = insert_endpoint(net, addr_str, ep);
+       if (ret != 0) {
+               return ret;
        }
-       /* Open fd in found/created endpoint. */
-       struct endpoint *ep = ep_array->at[index];
-       assert(ep != NULL);
        /* Create a libuv struct for this socket. */
        return open_endpoint_fd(net, ep, fd, sock_type, use_tls);
 }