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.
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);
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