mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 05:28:00 +00:00
Abort when libuv at runtime mismatches libuv at compile time
When we compile with libuv that has some capabilities via flags passed to f.e. uv_udp_listen() or uv_udp_bind(), the call with such flags would fail with invalid arguments when older libuv version is linked at the runtime that doesn't understand the flag that was available at the compile time. Enforce minimal libuv version when flags have been available at the compile time, but are not available at the runtime. This check is less strict than enforcing the runtime libuv version to be same or higher than compile time libuv version.
This commit is contained in:
parent
ed4dd7bef7
commit
eb8f2974b1
@ -207,6 +207,18 @@ isc__nm_threadpool_initialize(uint32_t workers) {
|
||||
}
|
||||
}
|
||||
|
||||
#if HAVE_DECL_UV_UDP_LINUX_RECVERR
|
||||
#define MINIMAL_UV_VERSION UV_VERSION(1, 42, 0)
|
||||
#elif HAVE_DECL_UV_UDP_MMSG_FREE
|
||||
#define MINIMAL_UV_VERSION UV_VERSION(1, 40, 0)
|
||||
#elif HAVE_DECL_UV_UDP_RECVMMSG
|
||||
#define MINIMAL_UV_VERSION UV_VERSION(1, 37, 0)
|
||||
#elif HAVE_DECL_UV_UDP_MMSG_CHUNK
|
||||
#define MINIMAL_UV_VERSION UV_VERSION(1, 35, 0)
|
||||
#else
|
||||
#define MINIMAL_UV_VERSION UV_VERSION(1, 0, 0)
|
||||
#endif
|
||||
|
||||
void
|
||||
isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
|
||||
isc_nm_t *mgr = NULL;
|
||||
@ -214,6 +226,14 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
|
||||
|
||||
REQUIRE(workers > 0);
|
||||
|
||||
if (uv_version() < MINIMAL_UV_VERSION) {
|
||||
isc_error_fatal(__FILE__, __LINE__,
|
||||
"libuv version too old: running with libuv %s "
|
||||
"when compiled with libuv %s will lead to "
|
||||
"libuv failures because of unknown flags",
|
||||
uv_version_string(), UV_VERSION_STRING);
|
||||
}
|
||||
|
||||
isc__nm_threadpool_initialize(workers);
|
||||
|
||||
mgr = isc_mem_get(mctx, sizeof(*mgr));
|
||||
|
@ -23,6 +23,23 @@
|
||||
|
||||
#define UV_VERSION(major, minor, patch) ((major << 16) | (minor << 8) | (patch))
|
||||
|
||||
/*
|
||||
* Copied verbatim from libuv/src/version.c
|
||||
*/
|
||||
|
||||
#define UV_STRINGIFY(v) UV_STRINGIFY_HELPER(v)
|
||||
#define UV_STRINGIFY_HELPER(v) #v
|
||||
|
||||
#define UV_VERSION_STRING_BASE \
|
||||
UV_STRINGIFY(UV_VERSION_MAJOR) \
|
||||
"." UV_STRINGIFY(UV_VERSION_MINOR) "." UV_STRINGIFY(UV_VERSION_PATCH)
|
||||
|
||||
#if UV_VERSION_IS_RELEASE
|
||||
#define UV_VERSION_STRING UV_VERSION_STRING_BASE
|
||||
#else
|
||||
#define UV_VERSION_STRING UV_VERSION_STRING_BASE "-" UV_VERSION_SUFFIX
|
||||
#endif
|
||||
|
||||
#if !defined(UV__ERR)
|
||||
#define UV__ERR(x) (-(x))
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user