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().
This commit is contained in:
committed by
Andoni Duarte
parent
609a41517b
commit
4ae4e255cf
@@ -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);
|
||||
|
||||
@@ -759,7 +759,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);
|
||||
|
||||
Reference in New Issue
Block a user