]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Move netmgr/uv-compat.h to <isc/uv.h>
authorOndřej Surý <ondrej@isc.org>
Wed, 27 Apr 2022 15:41:47 +0000 (17:41 +0200)
committerOndřej Surý <ondrej@isc.org>
Tue, 3 May 2022 08:02:19 +0000 (10:02 +0200)
As we are going to use libuv outside of the netmgr, we need the shims to
be readily available for the rest of the codebase.

Move the "netmgr/uv-compat.h" to <isc/uv.h> and netmgr/uv-compat.c to
uv.c, and as a rule of thumb, the users of libuv should include
<isc/uv.h> instead of <uv.h> directly.

Additionally, merge netmgr/uverr2result.c into uv.c and rename the
single function from isc__nm_uverr2result() to isc_uverr2result().

24 files changed:
bin/named/dlz_dlopen_driver.c
bin/named/main.c
lib/dns/dyndb.c
lib/dns/tests/dispatch_test.c
lib/isc/Makefile.am
lib/isc/include/isc/barrier.h
lib/isc/include/isc/uv.h [moved from lib/isc/netmgr/uv-compat.h with 69% similarity]
lib/isc/netmgr/netmgr-int.h
lib/isc/netmgr/netmgr.c
lib/isc/netmgr/socket.c
lib/isc/netmgr/tcp.c
lib/isc/netmgr/tcpdns.c
lib/isc/netmgr/timer.c
lib/isc/netmgr/tlsdns.c
lib/isc/netmgr/tlsstream.c
lib/isc/netmgr/udp.c
lib/isc/netmgr/uv-compat.c [deleted file]
lib/isc/task.c
lib/isc/tests/Makefile.am
lib/isc/tests/doh_test.c
lib/isc/tests/netmgr_test.c
lib/isc/tests/uv_wrap.h
lib/isc/uv.c [moved from lib/isc/netmgr/uverr2result.c with 60% similarity]
lib/ns/hooks.c

index 45cfbfa97687c6662a30daa0d35efba50b7700db..bd96882b64b887dbc6fdb9a6b58b6351fd5da8be 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <uv.h>
 
 #include <isc/mem.h>
 #include <isc/print.h>
 #include <isc/result.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include <dns/dlz_dlopen.h>
 #include <dns/log.h>
index 33421faeaa4f5f647ff5063e5285e8063ac93403..2977dcbd7bc484a560e992a6f8eb650f8ce67d9f 100644 (file)
@@ -19,7 +19,6 @@
 #include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
-#include <uv.h>
 
 #ifdef HAVE_DNSTAP
 #include <protobuf-c/protobuf-c.h>
@@ -44,6 +43,7 @@
 #include <isc/task.h>
 #include <isc/timer.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include <dns/dispatch.h>
 #include <dns/dyndb.h>
index 682e0b2eb351dd09b9edec3af22d69eb900c6ae4..253d58f9fe22a7bcf22ff01222f66b4030976365 100644 (file)
@@ -12,7 +12,6 @@
  */
 
 #include <string.h>
-#include <uv.h>
 
 #include <isc/buffer.h>
 #include <isc/mem.h>
@@ -23,6 +22,7 @@
 #include <isc/task.h>
 #include <isc/types.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include <dns/dyndb.h>
 #include <dns/log.h>
index f51c05332e3b244ce11ce3031fdfa4eab6ac10b7..76d498041d453395f3d5049b5c8b3464cdfb1b8c 100644 (file)
@@ -22,7 +22,6 @@
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <uv.h>
 
 #define UNIT_TESTING
 #include <cmocka.h>
@@ -32,6 +31,7 @@
 #include <isc/refcount.h>
 #include <isc/task.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include <dns/dispatch.h>
 #include <dns/name.h>
@@ -68,7 +68,7 @@ const struct in6_addr in6addr_blackhole = { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 static int
 setup_ephemeral_port(isc_sockaddr_t *addr, sa_family_t family) {
        socklen_t addrlen = sizeof(*addr);
-       uv_os_sock_t fd;
+       uv_os_sock_t fd = -1;
        int r;
 
        isc_sockaddr_fromin6(addr, &in6addr_loopback, 0);
index 7ac556adaabbe7ff513dbbdabe2197cab2eb66e0..16bb818f46b6c376d5da7d3c9406aefde9b83b0d 100644 (file)
@@ -97,7 +97,8 @@ libisc_la_HEADERS =                   \
        include/isc/types.h             \
        include/isc/url.h               \
        include/isc/utf8.h              \
-       include/isc/util.h
+       include/isc/util.h              \
+       include/isc/uv.h
 
 libisc_la_SOURCES =            \
        $(libisc_la_HEADERS)    \
@@ -109,9 +110,6 @@ libisc_la_SOURCES =         \
        netmgr/timer.c          \
        netmgr/tlsdns.c         \
        netmgr/udp.c            \
-       netmgr/uv-compat.c      \
-       netmgr/uv-compat.h      \
-       netmgr/uverr2result.c   \
        aes.c                   \
        app.c                   \
        assertions.c            \
@@ -199,7 +197,8 @@ libisc_la_SOURCES =         \
        trampoline.c            \
        trampoline_p.h          \
        url.c                   \
-       utf8.c
+       utf8.c                  \
+       uv.c
 
 libisc_la_CPPFLAGS =           \
        $(AM_CPPFLAGS)          \
index 2ff380e1587e8fb8b29c59620566709ddfd2fcea..74e63276817b1d3a1c7f1119f391098132213d2a 100644 (file)
@@ -28,7 +28,7 @@
 
 #else
 
-#include <uv.h>
+#include <isc/uv.h>
 
 #define isc_barrier_t uv_barrier_t
 
similarity index 69%
rename from lib/isc/netmgr/uv-compat.h
rename to lib/isc/include/isc/uv.h
index 91e5d2c107c395e9b39fe459aeac30d8b046bd28..c0f0d54154adc02a9b1911ffb4989be3ef8bd079 100644 (file)
  */
 
 #pragma once
+
+#include <stdbool.h>
 #include <uv.h>
 
+#include <isc/result.h>
+
 /*
  * These functions were introduced in newer libuv, but we still
  * want BIND9 compile on older ones so we emulate them.
- * They're inline to avoid conflicts when running with a newer
- * library version.
  */
 
 #define UV_VERSION(major, minor, patch) ((major << 16) | (minor << 8) | (patch))
 #define UV__ERR(x) (-(x))
 #endif
 
+#if UV_VERSION_HEX < UV_VERSION(1, 12, 0)
+int
+uv_os_getenv(const char *name, char *buffer, size_t *size);
+
+#define uv_os_setenv(name, value) setenv(name, value, 0)
+#endif /* UV_VERSION_HEX < UV_VERSION(1, 12, 0) */
+
 #if UV_VERSION_HEX < UV_VERSION(1, 19, 0)
 static inline void *
 uv_handle_get_data(const uv_handle_t *handle) {
@@ -89,30 +98,33 @@ isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr);
 #define isc_uv_udp_connect uv_udp_connect
 #endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */
 
-#if UV_VERSION_HEX < UV_VERSION(1, 12, 0)
-#include <stdlib.h>
-#include <string.h>
-
-static inline int
-uv_os_getenv(const char *name, char *buffer, size_t *size) {
-       size_t len;
-       char *buf = getenv(name);
-
-       if (buf == NULL) {
-               return (UV_ENOENT);
-       }
+/*
+ * These are used with all versions of libuv:
+ */
 
-       len = strlen(buf) + 1;
-       if (len > *size) {
-               *size = len;
-               return (UV_ENOBUFS);
+#define UV_RUNTIME_CHECK(func, ret)                                           \
+       if (ret != 0) {                                                       \
+               isc_error_fatal(__FILE__, __LINE__, "%s failed: %s\n", #func, \
+                               uv_strerror(ret));                            \
        }
 
-       *size = len;
-       memmove(buffer, buf, len);
+#define isc_uverr2result(x) \
+       isc__uverr2result(x, true, __FILE__, __LINE__, __func__)
+isc_result_t
+isc__uverr2result(int uverr, bool dolog, const char *file, unsigned int line,
+                 const char *func);
+/*%<
+ * Convert a libuv error value into an isc_result_t.  The
+ * list of supported error values is not complete; new users
+ * of this function should add any expected errors that are
+ * not already there.
+ */
 
-       return (0);
-}
+/**
+ * Type-casting helpers
+ */
 
-#define uv_os_setenv(name, value) setenv(name, value, 0)
-#endif /* UV_VERSION_HEX < UV_VERSION(1, 12, 0) */
+#define uv_handle_set_data(handle, data) \
+       uv_handle_set_data((uv_handle_t *)(handle), (data))
+#define uv_handle_get_data(handle) uv_handle_get_data((uv_handle_t *)(handle))
+#define uv_close(handle, close_cb) uv_close((uv_handle_t *)handle, close_cb)
index 0594faa5f6091975d9e1eaabbafcce1fe110c5c8..bf6c3039ff5e6d43adf3554059f1e140c31d4c22 100644 (file)
@@ -14,7 +14,6 @@
 #pragma once
 
 #include <unistd.h>
-#include <uv.h>
 
 #include <openssl/err.h>
 #include <openssl/ssl.h>
@@ -37,8 +36,7 @@
 #include <isc/thread.h>
 #include <isc/tls.h>
 #include <isc/util.h>
-
-#include "uv-compat.h"
+#include <isc/uv.h>
 
 #define ISC_NETMGR_TID_UNKNOWN -1
 
@@ -1821,18 +1819,6 @@ isc__nm_http_set_tlsctx(isc_nmsocket_t *sock, isc_tlsctx_t *tlsctx);
 void
 isc__nm_async_settlsctx(isc__networker_t *worker, isc__netievent_t *ev0);
 
-#define isc__nm_uverr2result(x) \
-       isc___nm_uverr2result(x, true, __FILE__, __LINE__, __func__)
-isc_result_t
-isc___nm_uverr2result(int uverr, bool dolog, const char *file,
-                     unsigned int line, const char *func);
-/*%<
- * Convert a libuv error value into an isc_result_t.  The
- * list of supported error values is not complete; new users
- * of this function should add any expected errors that are
- * not already there.
- */
-
 bool
 isc__nm_acquire_interlocked(isc_nm_t *mgr);
 /*%<
@@ -2149,12 +2135,6 @@ isc__nmsocket_readtimeout_cb(uv_timer_t *timer);
 void
 isc__nmsocket_writetimeout_cb(void *data, isc_result_t eresult);
 
-#define UV_RUNTIME_CHECK(func, ret)                                         \
-       if (ret != 0) {                                                     \
-               isc_error_fatal(__FILE__, __LINE__, "%s failed: %s", #func, \
-                               uv_strerror(ret));                          \
-       }
-
 /*
  * Bind to the socket, but allow binding to IPv6 tentative addresses reported by
  * the route socket by setting IP_FREEBIND (or equivalent).
index 0b250fe1dc8074de50496bd0fdf83efe6c6a74e1..880d57ed9853fca78d7d65224d6a13600c8ad515 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <inttypes.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/atomic.h>
 #include <isc/backtrace.h>
 #include <isc/thread.h>
 #include <isc/tls.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
 #include "netmgr_p.h"
 #include "openssl_shim.h"
 #include "trampoline_p.h"
-#include "uv-compat.h"
 
 /*%
  * How many isc_nmhandles and isc_nm_uvreqs will we be
@@ -3097,7 +3096,7 @@ isc__nm_after_work_cb(uv_work_t *req, int status) {
        isc_nm_t *netmgr = work->netmgr;
 
        if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
        }
 
        work->after_cb(work->data, result);
index 291ac99fa26124732cfebe9270098cc022e2033c..7a706c44cbeaa4b067c3e37569b48df9f0f80525 100644 (file)
@@ -12,9 +12,9 @@
  */
 
 #include <isc/errno.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
-#include "uv-compat.h"
 
 #define setsockopt_on(socket, level, name) \
        setsockopt(socket, level, name, &(int){ 1 }, sizeof(int))
@@ -67,7 +67,7 @@ int
 isc__nm_udp_freebind(uv_udp_t *handle, const struct sockaddr *addr,
                     unsigned int flags) {
        int r;
-       uv_os_sock_t fd;
+       uv_os_sock_t fd = -1;
 
        r = uv_fileno((const uv_handle_t *)handle, (uv_os_fd_t *)&fd);
        if (r < 0) {
@@ -119,7 +119,7 @@ int
 isc__nm_tcp_freebind(uv_tcp_t *handle, const struct sockaddr *addr,
                     unsigned int flags) {
        int r;
-       uv_os_sock_t fd;
+       uv_os_sock_t fd = -1;
 
        r = uv_fileno((const uv_handle_t *)handle, (uv_os_fd_t *)&fd);
        if (r < 0) {
index 1ef80d4e2ec8c7f526729b7311a7886e06a4fac6..c094c365a85d16764c3c36759bceb2a39ed0b250 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <libgen.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/atomic.h>
 #include <isc/barrier.h>
@@ -33,9 +32,9 @@
 #include <isc/stdtime.h>
 #include <isc/thread.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
-#include "uv-compat.h"
 
 static atomic_uint_fast32_t last_tcpquota_log = 0;
 
@@ -175,7 +174,7 @@ tcp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
        atomic_store(&sock->connected, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
        LOCK(&sock->lock);
        sock->result = result;
        SIGNAL(&sock->cond);
@@ -262,7 +261,7 @@ tcp_connect_cb(uv_connect_t *uvreq, int status) {
                result = ISC_R_TIMEDOUT;
                goto error;
        } else if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                goto error;
        }
 
@@ -270,7 +269,7 @@ tcp_connect_cb(uv_connect_t *uvreq, int status) {
        r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss,
                               &(int){ sizeof(ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto error;
        }
 
@@ -586,7 +585,7 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
                              ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
                              "uv_listen failed: %s",
-                             isc_result_totext(isc__nm_uverr2result(r)));
+                             isc_result_totext(isc_uverr2result(r)));
                isc__nm_incstats(sock, STATID_BINDFAIL);
                goto done;
        }
@@ -594,7 +593,7 @@ isc__nm_async_tcplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
        atomic_store(&sock->listening, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
        if (result != ISC_R_SUCCESS) {
                sock->pquota = NULL;
        }
@@ -616,7 +615,7 @@ tcp_connection_cb(uv_stream_t *server, int status) {
        isc_quota_t *quota = NULL;
 
        if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                goto done;
        }
 
@@ -853,7 +852,7 @@ isc__nm_tcp_read_cb(uv_stream_t *stream, ssize_t nread, const uv_buf_t *buf) {
                        isc__nm_incstats(sock, STATID_RECVFAIL);
                }
 
-               isc__nm_tcp_failed_read_cb(sock, isc__nm_uverr2result(nread));
+               isc__nm_tcp_failed_read_cb(sock, isc_uverr2result(nread));
 
                goto free;
        }
@@ -970,14 +969,14 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
 
        r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream);
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
        r = uv_tcp_getpeername(&csock->uv_handle.tcp, (struct sockaddr *)&ss,
                               &(int){ sizeof(ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -990,7 +989,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
        r = uv_tcp_getsockname(&csock->uv_handle.tcp, (struct sockaddr *)&ss,
                               &(int){ sizeof(ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -1090,8 +1089,7 @@ tcp_send_cb(uv_write_t *req, int status) {
 
        if (status < 0) {
                isc__nm_incstats(sock, STATID_SENDFAIL);
-               isc__nm_failed_send_cb(sock, uvreq,
-                                      isc__nm_uverr2result(status));
+               isc__nm_failed_send_cb(sock, uvreq, isc_uverr2result(status));
                return;
        }
 
@@ -1135,7 +1133,7 @@ tcp_send_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
        r = uv_write(&req->uv_req.write, &sock->uv_handle.stream, &req->uvbuf,
                     1, tcp_send_cb);
        if (r < 0) {
-               return (isc__nm_uverr2result(r));
+               return (isc_uverr2result(r));
        }
 
        isc_nm_timer_create(req->handle, isc__nmsocket_writetimeout_cb, req,
index 0d928069abe040a0680191210df876fa59b9fb23..e840cf40b32a507187312a26a4bc7f7cef55e6f9 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <libgen.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/atomic.h>
 #include <isc/barrier.h>
@@ -33,9 +32,9 @@
 #include <isc/stdtime.h>
 #include <isc/thread.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
-#include "uv-compat.h"
 
 static atomic_uint_fast32_t last_tcpdnsquota_log = 0;
 
@@ -145,7 +144,7 @@ tcpdns_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
        atomic_store(&sock->connected, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
 error:
        LOCK(&sock->lock);
        sock->result = result;
@@ -225,7 +224,7 @@ tcpdns_connect_cb(uv_connect_t *uvreq, int status) {
                result = ISC_R_TIMEDOUT;
                goto error;
        } else if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                goto error;
        }
 
@@ -233,7 +232,7 @@ tcpdns_connect_cb(uv_connect_t *uvreq, int status) {
        r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss,
                               &(int){ sizeof(ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto error;
        }
 
@@ -325,7 +324,7 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_sockaddr_t *local, isc_sockaddr_t *peer,
 static uv_os_sock_t
 isc__nm_tcpdns_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) {
        isc_result_t result;
-       uv_os_sock_t sock;
+       uv_os_sock_t sock = -1;
 
        result = isc__nm_socket(sa_family, SOCK_STREAM, 0, &sock);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
@@ -552,7 +551,7 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
                              ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
                              "uv_listen failed: %s",
-                             isc_result_totext(isc__nm_uverr2result(r)));
+                             isc_result_totext(isc_uverr2result(r)));
                isc__nm_incstats(sock, STATID_BINDFAIL);
                goto done;
        }
@@ -560,7 +559,7 @@ isc__nm_async_tcpdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
        atomic_store(&sock->listening, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
        if (result != ISC_R_SUCCESS) {
                sock->pquota = NULL;
        }
@@ -582,7 +581,7 @@ tcpdns_connection_cb(uv_stream_t *server, int status) {
        isc_quota_t *quota = NULL;
 
        if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                goto done;
        }
 
@@ -853,7 +852,7 @@ isc__nm_tcpdns_read_cb(uv_stream_t *stream, ssize_t nread,
                        isc__nm_incstats(sock, STATID_RECVFAIL);
                }
 
-               isc__nm_failed_read_cb(sock, isc__nm_uverr2result(nread), true);
+               isc__nm_failed_read_cb(sock, isc_uverr2result(nread), true);
                goto free;
        }
 
@@ -972,7 +971,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
 
        r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream);
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -980,7 +979,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
                               (struct sockaddr *)&peer_ss,
                               &(int){ sizeof(peer_ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -994,7 +993,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
                               (struct sockaddr *)&local_ss,
                               &(int){ sizeof(local_ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -1115,8 +1114,7 @@ tcpdns_send_cb(uv_write_t *req, int status) {
 
        if (status < 0) {
                isc__nm_incstats(sock, STATID_SENDFAIL);
-               isc__nm_failed_send_cb(sock, uvreq,
-                                      isc__nm_uverr2result(status));
+               isc__nm_failed_send_cb(sock, uvreq, isc_uverr2result(status));
                return;
        }
 
@@ -1175,14 +1173,14 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) {
                /* uv_try_write not supported, send asynchronously */
        } else {
                /* error sending data */
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto fail;
        }
 
        r = uv_write(&uvreq->uv_req.write, &sock->uv_handle.stream, bufs, nbufs,
                     tcpdns_send_cb);
        if (r < 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto fail;
        }
 
index 83287750ab5ecdf83c6b6c7dcb3ffd9af37eb817..7cfa433f0558d3e5ccf10e4b6981fc52c1ab5272 100644 (file)
  * information regarding copyright ownership.
  */
 
-#include <uv.h>
-
 #include <isc/netmgr.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
 
index 3529c356160ad1f028839f877b88904252864b0c..15b4bcdb3e7b9236a1d7c3070c6d4898fd7817c1 100644 (file)
@@ -13,7 +13,6 @@
 
 #include <libgen.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/atomic.h>
 #include <isc/barrier.h>
 #include <isc/stdtime.h>
 #include <isc/thread.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
 #include "openssl_shim.h"
-#include "uv-compat.h"
 
 static atomic_uint_fast32_t last_tlsdnsquota_log = 0;
 
@@ -175,7 +174,7 @@ tlsdns_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
        atomic_store(&sock->connected, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
 error:
        LOCK(&sock->lock);
        sock->result = result;
@@ -254,7 +253,7 @@ tlsdns_connect_cb(uv_connect_t *uvreq, int status) {
                result = ISC_R_TIMEDOUT;
                goto error;
        } else if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                goto error;
        }
 
@@ -262,7 +261,7 @@ tlsdns_connect_cb(uv_connect_t *uvreq, int status) {
        r = uv_tcp_getpeername(&sock->uv_handle.tcp, (struct sockaddr *)&ss,
                               &(int){ sizeof(ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto error;
        }
 
@@ -640,7 +639,7 @@ isc__nm_async_tlsdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
                isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL,
                              ISC_LOGMODULE_NETMGR, ISC_LOG_ERROR,
                              "uv_listen failed: %s",
-                             isc_result_totext(isc__nm_uverr2result(r)));
+                             isc_result_totext(isc_uverr2result(r)));
                isc__nm_incstats(sock, STATID_BINDFAIL);
                goto done;
        }
@@ -648,7 +647,7 @@ isc__nm_async_tlsdnslisten(isc__networker_t *worker, isc__netievent_t *ev0) {
        atomic_store(&sock->listening, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
        if (result != ISC_R_SUCCESS) {
                sock->pquota = NULL;
        }
@@ -670,7 +669,7 @@ tlsdns_connection_cb(uv_stream_t *server, int status) {
        isc_quota_t *quota = NULL;
 
        if (status != 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                goto done;
        }
 
@@ -1195,7 +1194,7 @@ free_senddata(isc_nmsocket_t *sock, const isc_result_t result) {
 
 static void
 tls_write_cb(uv_write_t *req, int status) {
-       isc_result_t result = status != 0 ? isc__nm_uverr2result(status)
+       isc_result_t result = status != 0 ? isc_uverr2result(status)
                                          : ISC_R_SUCCESS;
        isc__nm_uvreq_t *uvreq = (isc__nm_uvreq_t *)req->data;
        isc_nmsocket_t *sock = uvreq->sock;
@@ -1271,7 +1270,7 @@ tls_cycle_output(isc_nmsocket_t *sock) {
                        /* uv_try_write is not supported, send
                         * asynchronously */
                } else {
-                       result = isc__nm_uverr2result(r);
+                       result = isc_uverr2result(r);
                        isc__nm_uvreq_put(&req, sock);
                        free_senddata(sock, result);
                        break;
@@ -1280,7 +1279,7 @@ tls_cycle_output(isc_nmsocket_t *sock) {
                r = uv_write(&req->uv_req.write, &sock->uv_handle.stream,
                             &req->uvbuf, 1, tls_write_cb);
                if (r < 0) {
-                       result = isc__nm_uverr2result(r);
+                       result = isc_uverr2result(r);
                        isc__nm_uvreq_put(&req, sock);
                        free_senddata(sock, result);
                        break;
@@ -1408,7 +1407,7 @@ isc__nm_tlsdns_read_cb(uv_stream_t *stream, ssize_t nread,
                        isc__nm_incstats(sock, STATID_RECVFAIL);
                }
 
-               isc__nm_failed_read_cb(sock, isc__nm_uverr2result(nread), true);
+               isc__nm_failed_read_cb(sock, isc_uverr2result(nread), true);
 
                goto free;
        }
@@ -1528,7 +1527,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
 
        r = uv_accept(&ssock->uv_handle.stream, &csock->uv_handle.stream);
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -1536,7 +1535,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
                               (struct sockaddr *)&peer_ss,
                               &(int){ sizeof(peer_ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
@@ -1550,7 +1549,7 @@ accept_connection(isc_nmsocket_t *ssock, isc_quota_t *quota) {
                               (struct sockaddr *)&local_ss,
                               &(int){ sizeof(local_ss) });
        if (r != 0) {
-               result = isc__nm_uverr2result(r);
+               result = isc_uverr2result(r);
                goto failure;
        }
 
index c7d7fafd3366e6a7380bc15f055d6b97b3abe855..2734bae7aebc627158775ad87196173d4f455fac 100644 (file)
@@ -14,7 +14,6 @@
 #include <errno.h>
 #include <libgen.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <openssl/err.h>
 #include <openssl/ssl.h>
 #include <isc/stdtime.h>
 #include <isc/thread.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "../openssl_shim.h"
 #include "netmgr-int.h"
-#include "uv-compat.h"
 
 #define TLS_BUF_SIZE (UINT16_MAX)
 
index df4312fba25d71f4e87ccaf0e6b53197905053f0..505cd0442b62c61da3d3952538dbfcf0f2e83191 100644 (file)
@@ -12,7 +12,6 @@
  */
 
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/atomic.h>
 #include <isc/barrier.h>
@@ -29,9 +28,9 @@
 #include <isc/sockaddr.h>
 #include <isc/thread.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "netmgr-int.h"
-#include "uv-compat.h"
 
 #ifdef HAVE_NET_ROUTE_H
 #include <net/route.h>
@@ -87,7 +86,7 @@ stop_udp_child(isc_nmsocket_t *sock);
 static uv_os_sock_t
 isc__nm_udp_lb_socket(isc_nm_t *mgr, sa_family_t sa_family) {
        isc_result_t result;
-       uv_os_sock_t sock;
+       uv_os_sock_t sock = -1;
 
        result = isc__nm_socket(sa_family, SOCK_DGRAM, 0, &sock);
        RUNTIME_CHECK(result == ISC_R_SUCCESS);
@@ -223,7 +222,7 @@ isc_nm_listenudp(isc_nm_t *mgr, uint32_t workers, isc_sockaddr_t *iface,
 static isc_result_t
 route_socket(uv_os_sock_t *fdp) {
        isc_result_t result;
-       uv_os_sock_t fd;
+       uv_os_sock_t fd = -1;
 #ifdef USE_NETLINK
        struct sockaddr_nl sa;
        int r;
@@ -286,7 +285,7 @@ route_connect_direct(isc_nmsocket_t *sock) {
        atomic_store(&sock->connected, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
 error:
 
        LOCK(&sock->lock);
@@ -502,7 +501,7 @@ isc__nm_async_udplisten(isc__networker_t *worker, isc__netievent_t *ev0) {
        atomic_store(&sock->listening, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
        atomic_fetch_add(&sock->parent->rchildren, 1);
        if (sock->parent->result == ISC_R_UNSET) {
                sock->parent->result = result;
@@ -603,8 +602,7 @@ udp_recv_cb(uv_udp_t *handle, ssize_t nrecv, const uv_buf_t *buf,
         * - If there was a networking error.
         */
        if (nrecv < 0) {
-               isc__nm_failed_read_cb(sock, isc__nm_uverr2result(nrecv),
-                                      false);
+               isc__nm_failed_read_cb(sock, isc_uverr2result(nrecv), false);
                goto free;
        }
 
@@ -796,7 +794,7 @@ udp_send_cb(uv_udp_send_t *req, int status) {
        REQUIRE(sock->tid == isc_nm_tid());
 
        if (status < 0) {
-               result = isc__nm_uverr2result(status);
+               result = isc_uverr2result(status);
                isc__nm_incstats(sock, STATID_SENDFAIL);
        }
 
@@ -837,7 +835,7 @@ udp_send_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req,
        r = uv_udp_send(&req->uv_req.udp_send, &sock->uv_handle.udp,
                        &req->uvbuf, 1, sa, udp_send_cb);
        if (r < 0) {
-               return (isc__nm_uverr2result(r));
+               return (isc_uverr2result(r));
        }
 
        return (ISC_R_SUCCESS);
@@ -914,7 +912,7 @@ udp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
        atomic_store(&sock->connected, true);
 
 done:
-       result = isc__nm_uverr2result(r);
+       result = isc_uverr2result(r);
 error:
 
        LOCK(&sock->lock);
diff --git a/lib/isc/netmgr/uv-compat.c b/lib/isc/netmgr/uv-compat.c
deleted file mode 100644 (file)
index 39ec0cf..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
- *
- * SPDX-License-Identifier: MPL-2.0
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, you can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * See the COPYRIGHT file distributed with this work for additional
- * information regarding copyright ownership.
- */
-
-#include "uv-compat.h"
-#include <unistd.h>
-
-#include <isc/util.h>
-
-#include "netmgr-int.h"
-
-#if UV_VERSION_HEX < UV_VERSION(1, 27, 0)
-int
-isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) {
-       int err = 0;
-
-       do {
-               int addrlen = (addr->sa_family == AF_INET)
-                                     ? sizeof(struct sockaddr_in)
-                                     : sizeof(struct sockaddr_in6);
-               err = connect(handle->io_watcher.fd, addr, addrlen);
-       } while (err == -1 && errno == EINTR);
-
-       if (err) {
-#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0)
-               return (uv_translate_sys_error(errno));
-#else
-               return (-errno);
-#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */
-       }
-
-       return (0);
-}
-#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */
-
-#if UV_VERSION_HEX < UV_VERSION(1, 32, 0)
-int
-uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb) {
-       if (setsockopt(handle->io_watcher.fd, SOL_SOCKET, SO_LINGER,
-                      &(struct linger){ 1, 0 }, sizeof(struct linger)) == -1)
-       {
-#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0)
-               return (uv_translate_sys_error(errno));
-#else
-               return (-errno);
-#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */
-       }
-
-       uv_close((uv_handle_t *)handle, close_cb);
-       return (0);
-}
-#endif /* UV_VERSION_HEX < UV_VERSION(1, 32, 0) */
index f61b46fd5d71ae5fe3f1cc40d05c808c6e543d4c..5df035e7c7d0a381b66a701082f9389617f04509 100644 (file)
@@ -20,7 +20,6 @@
 
 #include <stdbool.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/app.h>
 #include <isc/atomic.h>
@@ -39,6 +38,7 @@
 #include <isc/thread.h>
 #include <isc/time.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #ifdef HAVE_LIBXML2
 #include <libxml/xmlwriter.h>
@@ -49,7 +49,6 @@
 #include <json_object.h>
 #endif /* HAVE_JSON_C */
 
-#include "netmgr/uv-compat.h"
 #include "task_p.h"
 
 /*
index 4e93cfa3b55625f1d6052735ae5134a273a99e75..07ce59c9a896117a5c4cf304a6b5c830794de518 100644 (file)
@@ -1,7 +1,8 @@
 include $(top_srcdir)/Makefile.top
 
 AM_CPPFLAGS +=                 \
-       $(LIBISC_CFLAGS)
+       $(LIBISC_CFLAGS)        \
+       -I..
 
 LDADD +=                       \
        libisctest.la           \
index a2625a0a97a9e87b948aa2f7076c00b1307f8df2..0d3c43448ff684ddce7b2614c8524d72056a6f52 100644 (file)
@@ -21,7 +21,6 @@
 #include <stdlib.h>
 #include <time.h>
 #include <unistd.h>
-#include <uv.h>
 
 #define UNIT_TESTING
 #include <cmocka.h>
@@ -37,6 +36,7 @@
 #include <isc/refcount.h>
 #include <isc/sockaddr.h>
 #include <isc/thread.h>
+#include <isc/uv.h>
 
 #include "uv_wrap.h"
 #define KEEP_BEFORE
@@ -44,8 +44,6 @@
 #include "../netmgr/http.c"
 #include "../netmgr/netmgr-int.h"
 #include "../netmgr/socket.c"
-#include "../netmgr/uv-compat.c"
-#include "../netmgr/uv-compat.h"
 #include "../netmgr_p.h"
 #include "isctest.h"
 
index c9c6a7504d61f3d21c8fefcc0dda087dcf2129e4..6c8e3ed53e7a4e13d2c088d95d0624d05bd84179 100644 (file)
@@ -18,7 +18,6 @@
 #include <stdarg.h>
 #include <stdlib.h>
 #include <unistd.h>
-#include <uv.h>
 
 #define UNIT_TESTING
 #include <cmocka.h>
@@ -30,6 +29,7 @@
 #include <isc/sockaddr.h>
 #include <isc/thread.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include "uv_wrap.h"
 #define KEEP_BEFORE
@@ -37,8 +37,6 @@
 #include "../netmgr/netmgr-int.h"
 #include "../netmgr/socket.c"
 #include "../netmgr/udp.c"
-#include "../netmgr/uv-compat.c"
-#include "../netmgr/uv-compat.h"
 #include "../netmgr_p.h"
 #include "isctest.h"
 
@@ -244,7 +242,7 @@ _teardown(void **state __attribute__((unused))) {
 static int
 setup_ephemeral_port(isc_sockaddr_t *addr, sa_family_t family) {
        socklen_t addrlen = sizeof(*addr);
-       uv_os_sock_t fd;
+       uv_os_sock_t fd = -1;
        int r;
 
        isc_sockaddr_fromin6(addr, &in6addr_loopback, 0);
index 5c557b89883ce60f48e011fb4d7c19c8b5992245..f81c0c01b5921e18abfec1360f8b36e1caf66f12 100644 (file)
 #include <stdlib.h>
 #include <time.h>
 #include <unistd.h>
-#include <uv.h>
 
 #include <isc/atomic.h>
 
 #define UNIT_TESTING
 #include <cmocka.h>
 
-#include "../netmgr/uv-compat.h"
+#include <isc/uv.h>
 
 /* uv_udp_t */
 
similarity index 60%
rename from lib/isc/netmgr/uverr2result.c
rename to lib/isc/uv.c
index 5ce953d729d1d36d3d118e4eb37f8a1737464126..af23012fca0cd2bbaf7375a3d49ba610dfad6200 100644 (file)
  * information regarding copyright ownership.
  */
 
-#include <stdbool.h>
-#include <uv.h>
+#include <unistd.h>
 
-#include <isc/result.h>
-#include <isc/strerr.h>
-#include <isc/string.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
-#include "netmgr-int.h"
+#if UV_VERSION_HEX < UV_VERSION(1, 12, 0)
+#include <stdlib.h>
+#include <string.h>
+
+#endif
+
+#if UV_VERSION_HEX < UV_VERSION(1, 27, 0)
+int
+isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) {
+       int err = 0;
+
+       do {
+               int addrlen = (addr->sa_family == AF_INET)
+                                     ? sizeof(struct sockaddr_in)
+                                     : sizeof(struct sockaddr_in6);
+               err = connect(handle->io_watcher.fd, addr, addrlen);
+       } while (err == -1 && errno == EINTR);
+
+       if (err) {
+#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0)
+               return (uv_translate_sys_error(errno));
+#else
+               return (-errno);
+#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */
+       }
+
+       return (0);
+}
+#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */
+
+#if UV_VERSION_HEX < UV_VERSION(1, 32, 0)
+int
+uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb) {
+       if (setsockopt(handle->io_watcher.fd, SOL_SOCKET, SO_LINGER,
+                      &(struct linger){ 1, 0 }, sizeof(struct linger)) == -1)
+       {
+#if UV_VERSION_HEX >= UV_VERSION(1, 10, 0)
+               return (uv_translate_sys_error(errno));
+#else
+               return (-errno);
+#endif /* UV_VERSION_HEX >= UV_VERSION(1, 10, 0) */
+       }
+
+       INSIST(!uv_is_closing((uv_handle_t *)handle));
+       uv_close((uv_handle_t *)handle, close_cb);
+       return (0);
+}
+#endif /* UV_VERSION_HEX < UV_VERSION(1, 32, 0) */
+
+#define setsockopt_on(socket, level, name) \
+       setsockopt(socket, level, name, &(int){ 1 }, sizeof(int))
 
 /*%
  * Convert a libuv error value into an isc_result_t.  The
@@ -28,8 +75,8 @@
  * not already there.
  */
 isc_result_t
-isc___nm_uverr2result(int uverr, bool dolog, const char *file,
-                     unsigned int line, const char *func) {
+isc__uverr2result(int uverr, bool dolog, const char *file, unsigned int line,
+                 const char *func) {
        switch (uverr) {
        case 0:
                return (ISC_R_SUCCESS);
index 27c14ed098a3c5ccecf2ce40dd5322acdfc72286..702d0208404f779ac96167b19be73ca18693149c 100644 (file)
@@ -16,7 +16,6 @@
 #include <errno.h>
 #include <stdio.h>
 #include <string.h>
-#include <uv.h>
 
 #include <isc/errno.h>
 #include <isc/list.h>
@@ -27,6 +26,7 @@
 #include <isc/result.h>
 #include <isc/types.h>
 #include <isc/util.h>
+#include <isc/uv.h>
 
 #include <dns/view.h>