diff --git a/src/core/iomgr/tcp_server_windows.c b/src/core/iomgr/tcp_server_windows.c index 260948c76f8fbda0cc20e724fcdd057ec899e9db..0adbe9507c72b67bfbf796c6046f12dbb6f9655d 100644 --- a/src/core/iomgr/tcp_server_windows.c +++ b/src/core/iomgr/tcp_server_windows.c @@ -247,8 +247,12 @@ static void start_accept(server_port *port) { failure: if (port->shutting_down) { /* We are abandoning the listener port, take that into account to prevent - occasional hangs on shutdown. */ + occasional hangs on shutdown. The hang happens when sp->shutting_down + change is not seen by on_accept and we proceed to trying new accept, + but we fail there because the listening port has been closed in the + meantime. */ decrement_active_ports_and_notify(port); + return; } utf8_message = gpr_format_message(WSAGetLastError()); gpr_log(GPR_ERROR, message, utf8_message);