From 093af1a6099dfd0d0a25d47b229e5ba5e43e6cdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Witold=20Kr=C4=99cicki?= Date: Fri, 31 Jan 2020 10:10:44 +0100 Subject: [PATCH] Use libuv-provided uv_{export,import} if available. We were using our own versions of isc_uv_{export,import} functions for multithreaded TCP listeners. Upcoming libuv version will contain proper uv_{export,import} functions - use them if they're available. --- config.h.in | 3 +++ config.h.win32 | 9 +++++++++ configure | 2 +- configure.ac | 2 +- lib/isc/netmgr/uv-compat.c | 3 +++ lib/isc/netmgr/uv-compat.h | 10 ++++++++++ lib/isc/win32/libisc.def.in | 2 -- win32utils/Configure | 7 +++++++ 8 files changed, 34 insertions(+), 4 deletions(-) diff --git a/config.h.in b/config.h.in index a05f6c1cca..a280e6dafc 100644 --- a/config.h.in +++ b/config.h.in @@ -471,6 +471,9 @@ /* Define to 1 if you have the `uv_handle_set_data' function. */ #undef HAVE_UV_HANDLE_SET_DATA +/* Define to 1 if you have the `uv_import' function. */ +#undef HAVE_UV_IMPORT + /* Use zlib library */ #undef HAVE_ZLIB diff --git a/config.h.win32 b/config.h.win32 index 05296c7b45..84c4c8bcfb 100644 --- a/config.h.win32 +++ b/config.h.win32 @@ -355,6 +355,15 @@ typedef __int64 off_t; /* Define to 1 if you have the `HMAC_CTX_reset' function. */ @HAVE_HMAC_CTX_RESET@ +/* Define to 1 if you have the `uv_handle_get_data' function. */ +@HAVE_UV_HANDLE_GET_DATA@ + +/* Define to 1 if you have the `uv_handle_set_data' function. */ +@HAVE_UV_HANDLE_SET_DATA@ + +/* Define to 1 if you have the `uv_import' function. */ +@HAVE_UV_IMPORT@ + /* * Define to nothing if C supports flexible array members, and to 1 if it does * not. That way, with a declaration like `struct s { int n; double diff --git a/configure b/configure index 775b9ae506..57704c56df 100755 --- a/configure +++ b/configure @@ -15960,7 +15960,7 @@ LIBS="$LIBS $LIBUV_LIBS" # Those functions are only provided in newer versions of libuv, we'll be emulating them # for now -for ac_func in uv_handle_get_data uv_handle_set_data +for ac_func in uv_handle_get_data uv_handle_set_data uv_import do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" diff --git a/configure.ac b/configure.ac index 703880aacc..c4df467154 100644 --- a/configure.ac +++ b/configure.ac @@ -667,7 +667,7 @@ LIBS="$LIBS $LIBUV_LIBS" # Those functions are only provided in newer versions of libuv, we'll be emulating them # for now -AC_CHECK_FUNCS([uv_handle_get_data uv_handle_set_data]) +AC_CHECK_FUNCS([uv_handle_get_data uv_handle_set_data uv_import]) # # flockfile is usually provided by pthreads diff --git a/lib/isc/netmgr/uv-compat.c b/lib/isc/netmgr/uv-compat.c index 4e5531bda2..41dc0cd96d 100644 --- a/lib/isc/netmgr/uv-compat.c +++ b/lib/isc/netmgr/uv-compat.c @@ -15,6 +15,7 @@ #include +#ifndef HAVE_UV_IMPORT /* * XXXWPK: This code goes into libuv internals and it's platform dependent. * It's ugly, we shouldn't do it, but the alternative with passing sockets @@ -185,3 +186,5 @@ isc_uv_import(uv_stream_t *stream, isc_uv_stream_info_t *info) { return (uv_tcp_open(tcp, info->fd)); } #endif /* ifdef WIN32 */ + +#endif /* ifndef HAVE_UV_IMPORT */ diff --git a/lib/isc/netmgr/uv-compat.h b/lib/isc/netmgr/uv-compat.h index 662bd1cbd0..35d347958c 100644 --- a/lib/isc/netmgr/uv-compat.h +++ b/lib/isc/netmgr/uv-compat.h @@ -33,6 +33,14 @@ uv_handle_set_data(uv_handle_t *handle, void *data) { } #endif /* ifndef HAVE_UV_HANDLE_SET_DATA */ +#ifdef HAVE_UV_IMPORT + +#define isc_uv_stream_info_t uv_stream_info_t +#define isc_uv_export uv_export +#define isc_uv_import uv_import + +#else + /* * These functions are not available in libuv, but they're very internal * to libuv. We should try to get them merged upstream. @@ -69,3 +77,5 @@ isc_uv_import(uv_stream_t *stream, isc_uv_stream_info_t *info); * Imports uv_stream_info_t value into uv_stream_t to initialize a * shared stream. */ + +#endif diff --git a/lib/isc/win32/libisc.def.in b/lib/isc/win32/libisc.def.in index 4383854b10..fcf8ad779f 100644 --- a/lib/isc/win32/libisc.def.in +++ b/lib/isc/win32/libisc.def.in @@ -687,8 +687,6 @@ isc_timermgr_destroy isc_timermgr_poke isc_tm_timegm isc_tm_strptime -isc_uv_export -isc_uv_import isc_win32os_versioncheck openlog @IF PKCS11 diff --git a/win32utils/Configure b/win32utils/Configure index 70780e8d05..d95e70e1e8 100644 --- a/win32utils/Configure +++ b/win32utils/Configure @@ -223,6 +223,9 @@ my @substdefh = ("CONFIGARGS", "HAVE_HMAC_CTX_GET_MD", "HAVE_HMAC_CTX_NEW", "HAVE_HMAC_CTX_RESET", + "HAVE_UV_HANDLE_GET_DATA", + "HAVE_UV_HANDLE_SET_DATA", + "HAVE_UV_IMPORT", ); # for platform.h @@ -1321,6 +1324,10 @@ if ($use_libuv eq "auto") { last; } } + $configdefh{"HAVE_UV_HANDLE_SET_DATA"} = 1; + $configdefh{"HAVE_UV_HANDLE_GET_DATA"} = 1; + $configdefh{"HAVE_UV_IMPORT"} = 1; + # If we have one use it otherwise report the error if ($use_libuv eq "auto") {