From: Ondřej Surý Date: Sat, 8 Apr 2023 11:54:52 +0000 (+0200) Subject: Accept overquota TCP connection on local thread if possible X-Git-Tag: v9.19.13~39^2~6 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d27f6f2d68f15f5ed698a6e19cb852dded5f88af;p=thirdparty%2Fbind9.git Accept overquota TCP connection on local thread if possible If the quota callback is called on a thread matching the socket, call the TCP accept function directly instead of using isc_async_run() which allocates-deallocates memory. --- diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index b5c0facdc2c..670db305794 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -865,8 +865,15 @@ quota_accept_cb(isc_quota_t *quota, void *arg) { * This needs to be asynchronous, because the quota might have been * released by a different child socket. */ - isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL }); - isc_async_run(sock->worker->loop, tcpaccept_cb, sock); + if (sock->tid == isc_tid()) { + isc_result_t result = accept_connection(sock); + isc__nm_accept_connection_log(sock, result, + can_log_tcp_quota()); + sock->pquota = NULL; + } else { + isc__nmsocket_attach(sock, &(isc_nmsocket_t *){ NULL }); + isc_async_run(sock->worker->loop, tcpaccept_cb, sock); + } } static isc_result_t