Throttle the reading when writes are asynchronous
Be more aggressive when throttling the reading - when we can't send the
outgoing TCP synchronously with uv_try_write(), we start throttling the
reading immediately instead of waiting for the send buffers to fill up.
This should not affect behaved clients that read the data from the TCP
on the other end.
(cherry picked from commit bc3e713317)
This commit is contained in:
@@ -1284,6 +1284,13 @@ isc__nm_async_tcpdnssend(isc__networker_t *worker, isc__netievent_t *ev0) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
isc_log_write(isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR,
|
||||
ISC_LOG_DEBUG(3),
|
||||
"throttling TCP connection, the other side is not "
|
||||
"reading the data, switching to uv_write()");
|
||||
sock->reading_throttled = true;
|
||||
isc__nm_stop_reading(sock);
|
||||
|
||||
r = uv_write(&uvreq->uv_req.write, &sock->uv_handle.stream, bufs, nbufs,
|
||||
tcpdns_send_cb);
|
||||
if (r < 0) {
|
||||
|
||||
@@ -1377,6 +1377,14 @@ tls_cycle_output(isc_nmsocket_t *sock) {
|
||||
break;
|
||||
}
|
||||
|
||||
isc_log_write(
|
||||
isc_lctx, ISC_LOGCATEGORY_GENERAL, ISC_LOGMODULE_NETMGR,
|
||||
ISC_LOG_DEBUG(3),
|
||||
"throttling TCP connection, the other side is not "
|
||||
"reading the data, switching to uv_write()");
|
||||
sock->reading_throttled = true;
|
||||
isc__nm_stop_reading(sock);
|
||||
|
||||
r = uv_write(&req->uv_req.write, &sock->uv_handle.stream,
|
||||
&req->uvbuf, 1, tls_write_cb);
|
||||
if (r < 0) {
|
||||
|
||||
Reference in New Issue
Block a user