Update to 9.16.30 (#2097312)
https://downloads.isc.org/isc/bind9/9.16.30/doc/arm/html/notes.html#notes-for-bind-9-16-30
This commit is contained in:
parent
e3377c558b
commit
f887e16911
2
.gitignore
vendored
2
.gitignore
vendored
@ -174,3 +174,5 @@ bind-9.7.2b1.tar.gz
|
||||
/bind-9.16.28.tar.xz.asc
|
||||
/bind-9.16.29.tar.xz
|
||||
/bind-9.16.29.tar.xz.asc
|
||||
/bind-9.16.30.tar.xz
|
||||
/bind-9.16.30.tar.xz.asc
|
||||
|
@ -1,214 +0,0 @@
|
||||
From 0df59049fe13ef89d362fa7f109f289b297441dc Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= <ondrej@isc.org>
|
||||
Date: Tue, 22 Feb 2022 23:40:39 +0100
|
||||
Subject: [PATCH] Provide alternative isc_queue implementation based on locked
|
||||
list
|
||||
|
||||
The current implementation of isc_queue uses Michael-Scott lock-free
|
||||
queue that in turn uses hazard pointers. It was discovered that the way
|
||||
we use the isc_queue, such complicated mechanism isn't really needed,
|
||||
because most of the time, we either execute the work directly when on
|
||||
nmthread (in case of UDP) or schedule the work from the matching
|
||||
nmthreads.
|
||||
|
||||
Provide alternative implementation for the isc_queue based on locked
|
||||
ISC_LIST.
|
||||
PatchNumber: 11
|
||||
PatchNumber: 11
|
||||
---
|
||||
bin/named/main.c | 1 -
|
||||
configure.ac | 12 ++++
|
||||
lib/isc/include/isc/queue.h | 3 +-
|
||||
lib/isc/queue.c | 121 ++++++++++++++++++++++++++++++++++++
|
||||
4 files changed, 134 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/bin/named/main.c b/bin/named/main.c
|
||||
index 9ad2d0e..8870933 100644
|
||||
--- a/bin/named/main.c
|
||||
+++ b/bin/named/main.c
|
||||
@@ -34,7 +34,6 @@
|
||||
#include <isc/dir.h>
|
||||
#include <isc/file.h>
|
||||
#include <isc/hash.h>
|
||||
-#include <isc/hp.h>
|
||||
#include <isc/httpd.h>
|
||||
#include <isc/managers.h>
|
||||
#include <isc/netmgr.h>
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index 79d33d1..26241a0 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -2263,8 +2263,20 @@ AS_CASE([$with_cmocka],
|
||||
AC_SUBST([CMOCKA_CFLAGS])
|
||||
AC_SUBST([CMOCKA_LIBS])
|
||||
|
||||
+#
|
||||
+# Use lock-free Michael-Scott's queue implementation or locked-list queue
|
||||
+#
|
||||
+# [pairwise: --enable-lock-free-queue, --disable-lock-free-queue]
|
||||
+AC_ARG_ENABLE([lock-free-queue],
|
||||
+ [AS_HELP_STRING([--enable-lock-free-queue],[enable lock-free queue implementation (default is enabled)])],
|
||||
+ [],[enable_lock_free_queue=yes])
|
||||
+AS_CASE([$enable_lock_free_queue],
|
||||
+ [no],[],
|
||||
+ [yes],[AC_DEFINE([USE_LOCK_FREE_QUEUE],[1],[Define to 1 to enable lock-free queue])])
|
||||
+
|
||||
AC_DEFINE([SKIPPED_TEST_EXIT_CODE], [0], [Exit code for skipped tests])
|
||||
|
||||
+
|
||||
#
|
||||
# Check for kyua execution engine if CMocka was requested
|
||||
# and bail out if execution engine was not found
|
||||
diff --git a/lib/isc/include/isc/queue.h b/lib/isc/include/isc/queue.h
|
||||
index 0927075..568bf18 100644
|
||||
--- a/lib/isc/include/isc/queue.h
|
||||
+++ b/lib/isc/include/isc/queue.h
|
||||
@@ -39,8 +39,7 @@ uintptr_t
|
||||
isc_queue_dequeue(isc_queue_t *queue);
|
||||
/*%<
|
||||
* Remove an object pointer from the head of the queue and return the
|
||||
- * pointer. If the queue is empty, return `nulluintptr` (the uintptr_t
|
||||
- * representation of NULL).
|
||||
+ * pointer. If the queue is empty, return `NULL`.
|
||||
*
|
||||
* Requires:
|
||||
* \li 'queue' is not null.
|
||||
diff --git a/lib/isc/queue.c b/lib/isc/queue.c
|
||||
index d7ea824..c4cb404 100644
|
||||
--- a/lib/isc/queue.c
|
||||
+++ b/lib/isc/queue.c
|
||||
@@ -28,6 +28,10 @@
|
||||
|
||||
static uintptr_t nulluintptr = (uintptr_t)NULL;
|
||||
|
||||
+#if USE_LOCK_FREE_QUEUE
|
||||
+
|
||||
+#define BUFFER_SIZE 1024
|
||||
+
|
||||
typedef struct node {
|
||||
atomic_uint_fast32_t deqidx;
|
||||
atomic_uintptr_t items[BUFFER_SIZE];
|
||||
@@ -232,3 +236,120 @@ isc_queue_destroy(isc_queue_t *queue) {
|
||||
alloced = queue->alloced_ptr;
|
||||
isc_mem_putanddetach(&queue->mctx, alloced, sizeof(*queue) + ALIGNMENT);
|
||||
}
|
||||
+
|
||||
+#else /* USE_LOCK_FREE_QUEUE */
|
||||
+
|
||||
+typedef struct node node_t;
|
||||
+
|
||||
+struct node {
|
||||
+ uintptr_t item;
|
||||
+ ISC_LINK(node_t) link;
|
||||
+};
|
||||
+
|
||||
+struct isc_queue {
|
||||
+ isc_mem_t *mctx;
|
||||
+ isc_mutex_t lock;
|
||||
+ int max_threads;
|
||||
+ ISC_LIST(node_t) nodes;
|
||||
+ void *alloced_ptr;
|
||||
+};
|
||||
+
|
||||
+static node_t *
|
||||
+node_new(isc_mem_t *mctx, uintptr_t item) {
|
||||
+ node_t *node = isc_mem_get(mctx, sizeof(*node));
|
||||
+ *node = (node_t){
|
||||
+ .item = item,
|
||||
+ };
|
||||
+
|
||||
+ ISC_LINK_INIT(node, link);
|
||||
+
|
||||
+ return (node);
|
||||
+}
|
||||
+
|
||||
+static void
|
||||
+node_destroy(isc_mem_t *mctx, node_t *node) {
|
||||
+ isc_mem_put(mctx, node, sizeof(*node));
|
||||
+}
|
||||
+
|
||||
+isc_queue_t *
|
||||
+isc_queue_new(isc_mem_t *mctx, int max_threads) {
|
||||
+ isc_queue_t *queue = NULL;
|
||||
+ void *qbuf = NULL;
|
||||
+ uintptr_t qptr;
|
||||
+
|
||||
+ qbuf = isc_mem_get(mctx, sizeof(*queue) + ALIGNMENT);
|
||||
+ qptr = (uintptr_t)qbuf;
|
||||
+ queue = (isc_queue_t *)(qptr + (ALIGNMENT - (qptr % ALIGNMENT)));
|
||||
+
|
||||
+ if (max_threads == 0) {
|
||||
+ max_threads = MAX_THREADS;
|
||||
+ }
|
||||
+
|
||||
+ *queue = (isc_queue_t){
|
||||
+ .max_threads = max_threads,
|
||||
+ .alloced_ptr = qbuf,
|
||||
+ };
|
||||
+
|
||||
+ ISC_LIST_INIT(queue->nodes);
|
||||
+
|
||||
+ isc_mutex_init(&queue->lock);
|
||||
+ isc_mem_attach(mctx, &queue->mctx);
|
||||
+
|
||||
+ return (queue);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+isc_queue_enqueue(isc_queue_t *queue, uintptr_t item) {
|
||||
+ node_t *node = node_new(queue->mctx, item);
|
||||
+ REQUIRE(item != nulluintptr);
|
||||
+
|
||||
+ LOCK(&queue->lock);
|
||||
+ ISC_LIST_ENQUEUE(queue->nodes, node, link);
|
||||
+ UNLOCK(&queue->lock);
|
||||
+}
|
||||
+
|
||||
+uintptr_t
|
||||
+isc_queue_dequeue(isc_queue_t *queue) {
|
||||
+ node_t *node = NULL;
|
||||
+ uintptr_t item = nulluintptr;
|
||||
+ REQUIRE(queue != NULL);
|
||||
+
|
||||
+ LOCK(&queue->lock);
|
||||
+ node = ISC_LIST_HEAD(queue->nodes);
|
||||
+ if (node != NULL) {
|
||||
+ ISC_LIST_DEQUEUE(queue->nodes, node, link);
|
||||
+ item = node->item;
|
||||
+ }
|
||||
+ UNLOCK(&queue->lock);
|
||||
+
|
||||
+ if (node != NULL) {
|
||||
+ node_destroy(queue->mctx, node);
|
||||
+ }
|
||||
+
|
||||
+ return (item);
|
||||
+}
|
||||
+
|
||||
+void
|
||||
+isc_queue_destroy(isc_queue_t *queue) {
|
||||
+ node_t *node = NULL;
|
||||
+ void *alloced = NULL;
|
||||
+
|
||||
+ REQUIRE(queue != NULL);
|
||||
+
|
||||
+ LOCK(&queue->lock);
|
||||
+ node = ISC_LIST_HEAD(queue->nodes);
|
||||
+ while (node != NULL) {
|
||||
+ node_t *next = ISC_LIST_NEXT(node, link);
|
||||
+ ISC_LIST_DEQUEUE(queue->nodes, node, link);
|
||||
+ node_destroy(queue->mctx, node);
|
||||
+ node = next;
|
||||
+ }
|
||||
+ UNLOCK(&queue->lock);
|
||||
+
|
||||
+ isc_mutex_destroy(&queue->lock);
|
||||
+
|
||||
+ alloced = queue->alloced_ptr;
|
||||
+ isc_mem_putanddetach(&queue->mctx, alloced, sizeof(*queue) + ALIGNMENT);
|
||||
+}
|
||||
+
|
||||
+#endif /* USE_LOCK_FREE_QUEUE */
|
||||
--
|
||||
2.34.1
|
||||
|
@ -1,66 +0,0 @@
|
||||
From 1feb389f80f7595d2f873c3ff8678b52cd2db828 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
|
||||
Date: Tue, 24 May 2022 19:42:41 +0200
|
||||
Subject: [PATCH] Fix failures in isc netmgr_test on big endian machines
|
||||
|
||||
Typing from libuv structure to isc_region_t is not possible, because
|
||||
their sizes differ on 64 bit architectures. Little endian machines seems
|
||||
to be lucky and still result in test passed. But big endian machine such
|
||||
as s390x fails the test reliably.
|
||||
|
||||
Fix by directly creating the buffer as isc_region_t and skipping the
|
||||
type conversion. More readable and still more correct.
|
||||
|
||||
(cherry picked from commit 057438cb45f2f02615dc309e3822f23c0ca70a0a)
|
||||
---
|
||||
lib/isc/tests/netmgr_test.c | 18 ++++++++----------
|
||||
1 file changed, 8 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/lib/isc/tests/netmgr_test.c b/lib/isc/tests/netmgr_test.c
|
||||
index c2d7fffb32..9fa0d47e5b 100644
|
||||
--- a/lib/isc/tests/netmgr_test.c
|
||||
+++ b/lib/isc/tests/netmgr_test.c
|
||||
@@ -62,11 +62,11 @@ static isc_sockaddr_t tcp_connect_addr;
|
||||
static uint64_t send_magic = 0;
|
||||
static uint64_t stop_magic = 0;
|
||||
|
||||
-static uv_buf_t send_msg = { .base = (char *)&send_magic,
|
||||
- .len = sizeof(send_magic) };
|
||||
+static isc_region_t send_msg = { .base = (unsigned char *)&send_magic,
|
||||
+ .length = sizeof(send_magic) };
|
||||
|
||||
-static uv_buf_t stop_msg = { .base = (char *)&stop_magic,
|
||||
- .len = sizeof(stop_magic) };
|
||||
+static isc_region_t stop_msg = { .base = (unsigned char *)&stop_magic,
|
||||
+ .length = sizeof(stop_magic) };
|
||||
|
||||
static atomic_bool do_send = false;
|
||||
static unsigned int workers = 0;
|
||||
@@ -420,11 +420,9 @@ connect_send(isc_nmhandle_t *handle) {
|
||||
isc_nmhandle_attach(handle, &sendhandle);
|
||||
isc_nmhandle_setwritetimeout(handle, T_IDLE);
|
||||
if (atomic_fetch_sub(&nsends, 1) > 1) {
|
||||
- isc_nm_send(sendhandle, (isc_region_t *)&send_msg,
|
||||
- connect_send_cb, NULL);
|
||||
+ isc_nm_send(sendhandle, &send_msg, connect_send_cb, NULL);
|
||||
} else {
|
||||
- isc_nm_send(sendhandle, (isc_region_t *)&stop_msg,
|
||||
- connect_send_cb, NULL);
|
||||
+ isc_nm_send(sendhandle, &stop_msg, connect_send_cb, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -531,8 +529,8 @@ listen_read_cb(isc_nmhandle_t *handle, isc_result_t eresult,
|
||||
isc_nmhandle_attach(handle, &sendhandle);
|
||||
isc_refcount_increment0(&active_ssends);
|
||||
isc_nmhandle_setwritetimeout(sendhandle, T_IDLE);
|
||||
- isc_nm_send(sendhandle, (isc_region_t *)&send_msg,
|
||||
- listen_send_cb, cbarg);
|
||||
+ isc_nm_send(sendhandle, &send_msg, listen_send_cb,
|
||||
+ cbarg);
|
||||
}
|
||||
return;
|
||||
}
|
||||
--
|
||||
2.34.3
|
||||
|
12
bind.spec
12
bind.spec
@ -51,8 +51,8 @@
|
||||
Summary: The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
|
||||
Name: bind
|
||||
License: MPLv2.0
|
||||
Version: 9.16.29
|
||||
Release: 2%{?dist}
|
||||
Version: 9.16.30
|
||||
Release: 1%{?dist}
|
||||
Epoch: 32
|
||||
Url: https://www.isc.org/downloads/bind/
|
||||
#
|
||||
@ -102,13 +102,9 @@ Patch24: bind-9.9.1-P2-dlz-libdb.patch
|
||||
|
||||
# https://gitlab.isc.org/isc-projects/bind9/-/merge_requests/2689
|
||||
Patch25:bind-9.11-rh1666814.patch
|
||||
# https://gitlab.isc.org/isc-projects/bind9/-/merge_requests/5905
|
||||
Patch26: bind-9.16-locked-isc-queue.patch
|
||||
# https://gitlab.isc.org/isc-projects/bind9/-/merge_requests/5273
|
||||
Patch27: bind-9.16-resolv.conf-options-timeout.patch
|
||||
Patch28: bind-9.16-resolv.conf-options-timeout-test.patch
|
||||
# https://gitlab.isc.org/isc-projects/bind9/-/merge_requests/6352
|
||||
Patch29: bind-9.16-rhbz2088125.patch
|
||||
|
||||
%{?systemd_ordering}
|
||||
Requires: coreutils
|
||||
@ -468,7 +464,6 @@ export LIBDIR_SUFFIX
|
||||
--includedir=%{_includedir}/bind9 \
|
||||
--with-tuning=large \
|
||||
--with-libidn2 \
|
||||
--disable-lock-free-queue \
|
||||
%if %{with GEOIP2}
|
||||
--with-maxminddb \
|
||||
%endif
|
||||
@ -1119,6 +1114,9 @@ fi;
|
||||
%endif
|
||||
|
||||
%changelog
|
||||
* Mon Jun 20 2022 Petr Menšík <pemensik@redhat.com> - 32:9.16.30-1
|
||||
- Update to 9.16.30 (#2097312)
|
||||
|
||||
* Mon Jun 13 2022 Python Maint <python-maint@redhat.com> - 32:9.16.29-2
|
||||
- Rebuilt for Python 3.11
|
||||
|
||||
|
4
sources
4
sources
@ -1,2 +1,2 @@
|
||||
SHA512 (bind-9.16.29.tar.xz) = b4acbafed370438ac53e73468ccb5ea5745a1c8f764dd96f9c9a027594a3b7ce0d486e7f01138b39795b456265e0e6116cd76e44f5a3329687cd718550ca79fb
|
||||
SHA512 (bind-9.16.29.tar.xz.asc) = 98c1fea8cc2a2465aff5f4449a122046fbb98ff648a96147885c4bdd9d1e7e578de693d14587544a8846c89c0cff97d2fa9620fb1a63c3938086b2fea0eb1112
|
||||
SHA512 (bind-9.16.30.tar.xz) = cc9bcbedf63c2efe0a23f14db3e57fdae46f0509aac58e5840a6805ce4fbd76cad5bfde4d461442adb88c4d947f8d79bf979aeb24aeb9303b6adc8d169b7118c
|
||||
SHA512 (bind-9.16.30.tar.xz.asc) = 943ff140aaa413f125d039748a0c10d7ae20b0fa4075227ab0b9d065816e7960a3c4e0fb2a4498946926409568c71076026cbd0be33a78db73966366d43bfdb1
|
||||
|
Loading…
Reference in New Issue
Block a user