]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Bump the libuv requirement to libuv >= 1.34.0
authorOndřej Surý <ondrej@isc.org>
Tue, 27 Sep 2022 12:10:40 +0000 (14:10 +0200)
committerOndřej Surý <ondrej@isc.org>
Tue, 27 Sep 2022 15:09:10 +0000 (17:09 +0200)
By bumping the minimum libuv version to 1.34.0, it allows us to remove
all libuv shims we ever had and makes the code much cleaner.  The
up-to-date libuv is available in all distributions supported by BIND
9.19+ either natively or as a backport.

configure.ac
doc/arm/build.inc.rst
doc/arm/platforms.inc.rst
lib/isc/include/isc/uv.h
lib/isc/netmgr/udp.c
lib/isc/uv.c
tests/isc/udp_test.c
tests/isc/uv_wrap.h

index 174f892f2ebe752a54bc959d07ad9ed4d4cb10eb..609f138efe06d5ffbe23329576524a8afc05519a 100644 (file)
@@ -552,8 +552,8 @@ AC_CHECK_HEADERS([pthread_np.h], [], [], [#include <pthread.h>])
 
 # libuv
 AC_MSG_CHECKING([for libuv])
-PKG_CHECK_MODULES([LIBUV], [libuv >= 1.0.0], [],
-                 [AC_MSG_ERROR([libuv not found])])
+PKG_CHECK_MODULES([LIBUV], [libuv >= 1.34.0], [],
+                 [AC_MSG_ERROR([libuv >= 1.34.0 not found])])
 
 AX_SAVE_FLAGS([libuv])
 CFLAGS="$CFLAGS $LIBUV_CFLAGS"
index 29486cb48cfe3c7df264f4419c67a215dfa5a09d..8971bc4c206b4ff0bec005428d84c864a3b00605 100644 (file)
@@ -60,7 +60,7 @@ To build BIND 9, the following packages must be installed:
 - ``perl``
 - ``pkg-config`` / ``pkgconfig`` / ``pkgconf``
 
-BIND 9.19 requires ``libuv`` 1.x or higher. On older systems, an updated
+BIND 9.19 requires ``libuv`` 1.34.0 or higher. On older systems, an updated
 ``libuv`` package needs to be installed from sources such as EPEL, PPA,
 or other native sources. The other option is to build and install
 ``libuv`` from source.
index 9b6b4cb5aac0a0deeafd854d11996dd3d297e505..4fa089d0d89b462f0f9074e6adc7544b0f030580 100644 (file)
@@ -107,7 +107,7 @@ These are platforms on which current versions of BIND 9 are known *not* to build
 -  Platforms that do not support atomic operations (via compiler or
    library)
 -  Linux without NPTL (Native POSIX Thread Library)
--  Platforms on which **libuv** cannot be compiled
+-  Platforms on which **libuv >= 1.34** cannot be compiled or is not available
 
 Installing BIND 9
 -----------------
index 25602d5717fb5e016f4f4e1e2a3b1523703c4c8a..476d8010c7547356514ae72b9b1edfac7bfc4593 100644 (file)
 #include <isc/result.h>
 #include <isc/tid.h>
 
-/*
- * These functions were introduced in newer libuv, but we still
- * want BIND9 compile on older ones so we emulate them.
- */
-
 #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) {
-       return (handle->data);
-}
-
-static inline void
-uv_handle_set_data(uv_handle_t *handle, void *data) {
-       handle->data = data;
-}
-
-static inline void *
-uv_req_get_data(const uv_req_t *req) {
-       return (req->data);
-}
-
-static inline void
-uv_req_set_data(uv_req_t *req, void *data) {
-       req->data = data;
-}
-#endif /* UV_VERSION_HEX < UV_VERSION(1, 19, 0) */
-
-#if UV_VERSION_HEX < UV_VERSION(1, 32, 0)
-int
-uv_tcp_close_reset(uv_tcp_t *handle, uv_close_cb close_cb);
-#endif
-
-#if UV_VERSION_HEX < UV_VERSION(1, 34, 0)
-#define uv_sleep(msec) usleep(msec * 1000)
-#endif /* UV_VERSION_HEX < UV_VERSION(1, 34, 0) */
-
-#if UV_VERSION_HEX < UV_VERSION(1, 27, 0)
-int
-isc_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr);
-/*%<
- * Associate the UDP handle to a remote address and port, so every message sent
- * by this handle is automatically sent to that destination.
- *
- * NOTE: This is just a limited shim for uv_udp_connect() as it requires the
- * handle to be bound.
- */
-#else /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */
-#define isc_uv_udp_connect uv_udp_connect
-#endif /* UV_VERSION_HEX < UV_VERSION(1, 27, 0) */
-
 /*
  * These are used with all versions of libuv:
  */
index 4706c74a38dad10c4b563a8da063b75dd6231d59..9b715d9b6ce901ed8d9aabd5d940fd5f2f01cf15 100644 (file)
@@ -725,17 +725,14 @@ isc__nm_udp_send(isc_nmhandle_t *handle, const isc_region_t *region,
        uvreq->cb.send = cb;
        uvreq->cbarg = cbarg;
 
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
        /*
-        * If we used uv_udp_connect() (and not the shim version for
-        * older versions of libuv), then the peer address has to be
+        * We used uv_udp_connect(), so the peer address has to be
         * set to NULL or else uv_udp_send() could fail or assert,
         * depending on the libuv version.
         */
        if (atomic_load(&sock->connected)) {
                sa = NULL;
        }
-#endif
 
        r = uv_udp_send(&uvreq->uv_req.udp_send, &sock->uv_handle.udp,
                        &uvreq->uvbuf, 1, sa, udp_send_cb);
@@ -790,8 +787,7 @@ udp_connect_direct(isc_nmsocket_t *sock, isc__nm_uvreq_t *req) {
         * giving up.
         */
        do {
-               r = isc_uv_udp_connect(&sock->uv_handle.udp,
-                                      &req->peer.type.sa);
+               r = uv_udp_connect(&sock->uv_handle.udp, &req->peer.type.sa);
        } while (r == UV_EADDRINUSE && --req->connect_tries > 0);
        if (r != 0) {
                isc__nm_incstats(sock, STATID_CONNECTFAIL);
index 5f4b12dde688e5c0a2fc33d4fceb069a08da5ed7..62c34415a5fb9d816df9284cb504674613ec3444 100644 (file)
 #include <isc/util.h>
 #include <isc/uv.h>
 
-#if UV_VERSION_HEX < UV_VERSION(1, 12, 0)
-#include <stdlib.h>
-#include <string.h>
-
-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);
-       }
-       len = strlen(buf) + 1;
-       if (len > *size) {
-               *size = len;
-               return (UV_ENOBUFS);
-       }
-       *size = len;
-       memmove(buffer, buf, len);
-       return (0);
-}
-
-#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
  * list of supported error values is not complete; new users
index 0cfd4e62a91f7bac988aadc29d79f736d1e617f5..9644f7c0fa4088abd1a7e495a7bd10da93867ca2 100644 (file)
@@ -228,7 +228,6 @@ ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_udp_bind) {
        RESET_RETURN;
 }
 
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
 ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_udp_connect) {
        WILL_RETURN(uv_udp_connect, UV_ENOMEM);
 
@@ -240,8 +239,6 @@ ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_udp_connect) {
        RESET_RETURN;
 }
 
-#endif
-
 ISC_LOOP_TEST_IMPL(mock_udpconnect_uv_recv_buffer_size) {
        WILL_RETURN(uv_recv_buffer_size, UV_ENOMEM);
 
@@ -1133,9 +1130,7 @@ ISC_TEST_ENTRY_CUSTOM(mock_listenudp_uv_udp_recv_start, setup_test,
                      teardown_test)
 ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_udp_open, setup_test, teardown_test)
 ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_udp_bind, setup_test, teardown_test)
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
 ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_udp_connect, setup_test, teardown_test)
-#endif
 ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_recv_buffer_size, setup_test,
                      teardown_test)
 ISC_TEST_ENTRY_CUSTOM(mock_udpconnect_uv_send_buffer_size, setup_test,
index f81c0c01b5921e18abfec1360f8b36e1caf66f12..8a6f7598ff2499c9258992a8c49f49e7b19b409a 100644 (file)
@@ -38,13 +38,11 @@ __wrap_uv_udp_open(uv_udp_t *handle, uv_os_sock_t sock);
 int
 __wrap_uv_udp_bind(uv_udp_t *handle, const struct sockaddr *addr,
                   unsigned int flags);
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
 int
 __wrap_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr);
 int
 __wrap_uv_udp_getpeername(const uv_udp_t *handle, struct sockaddr *name,
                          int *namelen);
-#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */
 int
 __wrap_uv_udp_getsockname(const uv_udp_t *handle, struct sockaddr *name,
                          int *namelen);
@@ -118,7 +116,6 @@ __wrap_uv_udp_bind(uv_udp_t *handle, const struct sockaddr *addr,
 
 static atomic_int __state_uv_udp_connect __attribute__((unused)) = 0;
 
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
 int
 __wrap_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) {
        if (atomic_load(&__state_uv_udp_connect) == 0) {
@@ -126,11 +123,9 @@ __wrap_uv_udp_connect(uv_udp_t *handle, const struct sockaddr *addr) {
        }
        return (atomic_load(&__state_uv_udp_connect));
 }
-#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */
 
 static atomic_int __state_uv_udp_getpeername __attribute__((unused)) = 0;
 
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
 int
 __wrap_uv_udp_getpeername(const uv_udp_t *handle, struct sockaddr *name,
                          int *namelen) {
@@ -139,7 +134,6 @@ __wrap_uv_udp_getpeername(const uv_udp_t *handle, struct sockaddr *name,
        }
        return (atomic_load(&__state_uv_udp_getpeername));
 }
-#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */
 
 static atomic_int __state_uv_udp_getsockname = 0;
 int
@@ -275,12 +269,10 @@ __wrap_uv_fileno(const uv_handle_t *handle, uv_os_fd_t *fd) {
        return (atomic_load(&__state_uv_fileno));
 }
 
-#define uv_udp_open(...) __wrap_uv_udp_open(__VA_ARGS__)
-#define uv_udp_bind(...) __wrap_uv_udp_bind(__VA_ARGS__)
-#if UV_VERSION_HEX >= UV_VERSION(1, 27, 0)
+#define uv_udp_open(...)       __wrap_uv_udp_open(__VA_ARGS__)
+#define uv_udp_bind(...)       __wrap_uv_udp_bind(__VA_ARGS__)
 #define uv_udp_connect(...)    __wrap_uv_udp_connect(__VA_ARGS__)
 #define uv_udp_getpeername(...) __wrap_uv_udp_getpeername(__VA_ARGS__)
-#endif /* UV_VERSION_HEX >= UV_VERSION(1, 27, 0) */
 #define uv_udp_getsockname(...) __wrap_uv_udp_getsockname(__VA_ARGS__)
 #define uv_udp_send(...)       __wrap_uv_udp_send(__VA_ARGS__)
 #define uv_udp_recv_start(...) __wrap_uv_udp_recv_start(__VA_ARGS__)