2
0
mirror of https://gitlab.isc.org/isc-projects/bind9 synced 2025-08-31 14:35:26 +00:00

allow streamdns read to resume after timeout

when reading on a streamdns socket failed due to timeout, but
the dispatch was still waiting for other responses, it would
resume reading by calling isc_nm_read() again. this caused
an assertion because the socket was already reading.

we now check that either the socket is reading, or that it was
already reading on the same handle.
This commit is contained in:
Evan Hunt
2023-05-13 23:31:45 -07:00
parent 562697e703
commit b4ac7faee9

View File

@@ -831,7 +831,7 @@ isc__nm_streamdns_read(isc_nmhandle_t *handle, isc_nm_recv_cb_t cb,
sock = handle->sock;
REQUIRE(VALID_NMSOCK(sock));
REQUIRE(sock->type == isc_nm_streamdnssocket);
REQUIRE(sock->recv_handle == NULL);
REQUIRE(sock->recv_handle == handle || sock->recv_handle == NULL);
REQUIRE(sock->tid == isc_tid());
closing = streamdns_closing(sock);
@@ -839,7 +839,9 @@ isc__nm_streamdns_read(isc_nmhandle_t *handle, isc_nm_recv_cb_t cb,
sock->recv_cb = cb;
sock->recv_cbarg = cbarg;
sock->reading = true;
isc_nmhandle_attach(handle, &sock->recv_handle);
if (sock->recv_handle == NULL) {
isc_nmhandle_attach(handle, &sock->recv_handle);
}
/*
* In some cases there is little sense in making the operation