From 140a24c50e7da04e85c0aa44cf91a4b099bc5bd1 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Fri, 22 Nov 2019 11:09:45 -0800 Subject: [PATCH] fixup! fixup! WiP: shutdown active sockets when shutting down netmgr --- lib/isc/netmgr/netmgr-int.h | 6 ++++++ lib/isc/netmgr/netmgr.c | 8 ++++---- lib/isc/netmgr/tcp.c | 7 +++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/lib/isc/netmgr/netmgr-int.h b/lib/isc/netmgr/netmgr-int.h index d46eb9a5a5..a4e7a02067 100644 --- a/lib/isc/netmgr/netmgr-int.h +++ b/lib/isc/netmgr/netmgr-int.h @@ -551,6 +551,12 @@ isc__nm_tcp_close(isc_nmsocket_t *sock); * Close a TCP socket. */ +void +isc__nm_tcp_shutdown(isc_nmsocket_t *sock); +/*%< + * Called on shutdown to close and clean up a listening TCP socket. + */ + void isc__nm_async_tcpconnect(isc__networker_t *worker, isc__netievent_t *ievent0); void diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c index 43876e1fdc..e1ae2aa5b8 100644 --- a/lib/isc/netmgr/netmgr.c +++ b/lib/isc/netmgr/netmgr.c @@ -1185,13 +1185,13 @@ isc__nm_async_closecb(isc__networker_t *worker, isc__netievent_t *ievent0) { static void shutdown_walk_cb(uv_handle_t *handle, void *arg) { + isc_nmsocket_t *sock = NULL; + UNUSED(arg); - isc_nmsocket_t *sock = (isc_nmsocket_t*) handle->data; + switch(handle->type) { case UV_TCP: - INSIST(VALID_NMSOCK(sock)); - /* XXX TODO this should be in tcp.c, not here */ - sock->rcb.recv(sock->tcphandle, NULL, sock->rcbarg); + isc__nm_tcp_shutdown((isc_nmsocket_t *) handle->data); break; default: break; diff --git a/lib/isc/netmgr/tcp.c b/lib/isc/netmgr/tcp.c index dbc82e7b0f..9d17bdfdb3 100644 --- a/lib/isc/netmgr/tcp.c +++ b/lib/isc/netmgr/tcp.c @@ -688,3 +688,10 @@ isc__nm_async_tcpclose(isc__networker_t *worker, isc__netievent_t *ievent0) { tcp_close_direct(ievent->sock); } + +void +isc__nm_tcp_shutdown(isc_nmsocket_t *sock) { + REQUIRE(VALID_NMSOCK(sock)); + + sock->rcb.recv(sock->tcphandle, NULL, sock->rcbarg); +}