Commit 5d677c1b authored by Ondřej Surý's avatar Ondřej Surý
Browse files

Merge branch '3079-always-enqueue-isc__nm_tcp_resumeread' into 'main'

Always enqueue isc__nm_tcp_resumeread()

Closes #3079

See merge request !5695
parents 57924739 5563d06d
Pipeline #92055 passed with stages
in 200 minutes and 39 seconds
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
signatures created by the KSK. [GL #3049]
 
......
......@@ -53,3 +53,7 @@ Bug Fixes
version of the zone, preventing resynchronization of zone contents
after ``named`` restart in case the unsigned zone file gets modified
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_nmsocket_t *sock = handle->sock;
isc__networker_t *worker = &sock->mgr->workers[sock->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);
isc__nm_maybe_enqueue_ievent(&sock->mgr->workers[sock->tid],
(isc__netievent_t *)ievent);
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);
}
}
void
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment