mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-11 08:20:01 -04:00
Do not stop timer in isc_nm_read_stop() in manual timer mode
A call to isc_nm_read_stop() would always stop reading timer even in
manual timer control mode which was added with StreamDNS in mind. That
looks like an omission that happened due to how timers are controlled
in StreamDNS where we always stop the timer before pausing reading
anyway (see streamdns_on_complete_dnsmessage()). That would not work
well for HTTP, though, where we might want pause reading without
stopping the timer in the case we want to split incoming data into
multiple chunks to be processed independently.
I suppose that it happened due to NM refactoring in the middle of
StreamDNS development (at the time isc_nm_cancelread() and
isc_nm_pauseread() were removed), as the StreamDNS code seems to be
written as if timers are not stoping during a call to
isc_nm_read_stop().
(cherry picked from commit 4ae4e255cf)
This commit is contained in:
parent
36e9720d24
commit
c53541bfc5
4 changed files with 12 additions and 1 deletions
|
|
@ -121,6 +121,7 @@ proxystream_on_header_data_cb(const isc_result_t result,
|
|||
* the case of TCP it is disabled by default
|
||||
*/
|
||||
proxystream_read_stop(sock);
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
isc__nmhandle_set_manual_timer(sock->outerhandle, false);
|
||||
|
||||
sock->proxy.header_processed = true;
|
||||
|
|
@ -775,6 +776,7 @@ isc__nm_proxystream_close(isc_nmsocket_t *sock) {
|
|||
* external references, we can close everything.
|
||||
*/
|
||||
proxystream_read_stop(sock);
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
if (sock->outerhandle != NULL) {
|
||||
sock->reading = false;
|
||||
isc_nm_read_stop(sock->outerhandle);
|
||||
|
|
|
|||
|
|
@ -1009,6 +1009,7 @@ streamdns_close_direct(isc_nmsocket_t *sock) {
|
|||
|
||||
if (sock->outerhandle != NULL) {
|
||||
sock->streamdns.reading = false;
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
isc_nm_read_stop(sock->outerhandle);
|
||||
isc_nmhandle_close(sock->outerhandle);
|
||||
isc_nmhandle_detach(&sock->outerhandle);
|
||||
|
|
|
|||
|
|
@ -722,7 +722,9 @@ isc__nm_tcp_read_stop(isc_nmhandle_t *handle) {
|
|||
|
||||
isc_nmsocket_t *sock = handle->sock;
|
||||
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
if (!sock->manual_read_timer) {
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
}
|
||||
isc__nm_stop_reading(sock);
|
||||
sock->reading = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -465,6 +465,7 @@ tls_try_handshake(isc_nmsocket_t *sock, isc_result_t *presult) {
|
|||
|
||||
isc__nmsocket_log_tls_session_reuse(sock, sock->tlsstream.tls);
|
||||
tlshandle = isc__nmhandle_get(sock, &sock->peer, &sock->iface);
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
tls_read_stop(sock);
|
||||
|
||||
if (isc__nm_closing(sock->worker)) {
|
||||
|
|
@ -1154,6 +1155,10 @@ isc__nm_tls_read_stop(isc_nmhandle_t *handle) {
|
|||
|
||||
handle->sock->reading = false;
|
||||
|
||||
if (!handle->sock->manual_read_timer) {
|
||||
isc__nmsocket_timer_stop(handle->sock);
|
||||
}
|
||||
|
||||
tls_read_stop(handle->sock);
|
||||
}
|
||||
|
||||
|
|
@ -1174,6 +1179,7 @@ isc__nm_tls_close(isc_nmsocket_t *sock) {
|
|||
*/
|
||||
tls_read_stop(sock);
|
||||
if (sock->outerhandle != NULL) {
|
||||
isc__nmsocket_timer_stop(sock);
|
||||
isc_nm_read_stop(sock->outerhandle);
|
||||
isc_nmhandle_close(sock->outerhandle);
|
||||
isc_nmhandle_detach(&sock->outerhandle);
|
||||
|
|
|
|||
Loading…
Reference in a new issue