mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-29 21:47:59 +00:00
Merge branch '3079-always-enqueue-isc__nm_tcp_resumeread' into 'main'
Always enqueue isc__nm_tcp_resumeread() Closes #3079 See merge request isc-projects/bind9!5695
This commit is contained in:
commit
5d677c1b36
5
CHANGES
5
CHANGES
@ -1,3 +1,8 @@
|
|||||||
|
5790. [bug] Enforce enqueuing TCP resumeread to prevent the
|
||||||
|
next read callback from being executed before the
|
||||||
|
current read callback has finished, and the worker
|
||||||
|
receive buffer has been marked as "freed". [GL #3079]
|
||||||
|
|
||||||
5789. [bug] Allow replacing expired zone signatures with
|
5789. [bug] Allow replacing expired zone signatures with
|
||||||
signatures created by the KSK. [GL #3049]
|
signatures created by the KSK. [GL #3049]
|
||||||
|
|
||||||
|
@ -53,3 +53,7 @@ Bug Fixes
|
|||||||
version of the zone, preventing resynchronization of zone contents
|
version of the zone, preventing resynchronization of zone contents
|
||||||
after ``named`` restart in case the unsigned zone file gets modified
|
after ``named`` restart in case the unsigned zone file gets modified
|
||||||
while ``named`` is not running. This has been fixed. :gl:`#3071`
|
while ``named`` is not running. This has been fixed. :gl:`#3071`
|
||||||
|
|
||||||
|
- Under certain circumstances, reading from the raw TCP channels used
|
||||||
|
for rndc and statistics could cause assertion failure. This has been
|
||||||
|
fixed. :gl:`#3079`
|
||||||
|
@ -814,6 +814,7 @@ isc__nm_tcp_resumeread(isc_nmhandle_t *handle) {
|
|||||||
|
|
||||||
isc__netievent_tcpstartread_t *ievent = NULL;
|
isc__netievent_tcpstartread_t *ievent = NULL;
|
||||||
isc_nmsocket_t *sock = handle->sock;
|
isc_nmsocket_t *sock = handle->sock;
|
||||||
|
isc__networker_t *worker = &sock->mgr->workers[sock->tid];
|
||||||
|
|
||||||
REQUIRE(sock->tid == isc_nm_tid());
|
REQUIRE(sock->tid == isc_nm_tid());
|
||||||
|
|
||||||
@ -835,8 +836,18 @@ isc__nm_tcp_resumeread(isc_nmhandle_t *handle) {
|
|||||||
|
|
||||||
ievent = isc__nm_get_netievent_tcpstartread(sock->mgr, sock);
|
ievent = isc__nm_get_netievent_tcpstartread(sock->mgr, sock);
|
||||||
|
|
||||||
isc__nm_maybe_enqueue_ievent(&sock->mgr->workers[sock->tid],
|
if (worker->recvbuf_inuse) {
|
||||||
|
/*
|
||||||
|
* If we happen to call the resumeread from inside the receive
|
||||||
|
* callback, the worker->recvbuf might still be in use, so we
|
||||||
|
* need to force enqueue the next read event.
|
||||||
|
*/
|
||||||
|
isc__nm_enqueue_ievent(worker, (isc__netievent_t *)ievent);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
isc__nm_maybe_enqueue_ievent(worker,
|
||||||
(isc__netievent_t *)ievent);
|
(isc__netievent_t *)ievent);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user