From 01ca149047c1dade3c4ecdf7bc0e65be564513ac Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 15 Oct 2020 07:11:14 +0200 Subject: [PATCH] MINOR: session: simplify error path in session_accept_fd() Now that this function is always called with an initialized connection and that the control layer is always initialized, we don't need to play games with fdtab[] to decide how to close, we can simply rely on the regular close path using conn_ctrl_close(), which can be fused with conn_xprt_close() into conn_full_close(). The code is cleaner because the FD is now used only for some protocol-specific setup (that will eventually have to move) and to try to send a hard-coded HTTP 500 error message on raw sockets. --- src/session.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/session.c b/src/session.c index 2673482ff..b065ff3d2 100644 --- a/src/session.c +++ b/src/session.c @@ -271,11 +271,8 @@ int session_accept_fd(struct connection *cli_conn) * done below, for all errors. */ sess->listener = NULL; session_free(sess); + out_free_conn: - conn_stop_tracking(cli_conn); - conn_xprt_close(cli_conn); - conn_free(cli_conn); - listener_release(l); if (ret < 0 && l->bind_conf->xprt == xprt_get(XPRT_RAW) && p->mode == PR_MODE_HTTP && l->bind_conf->mux_proto == NULL) { /* critical error, no more memory, try to emit a 500 response */ @@ -283,10 +280,10 @@ int session_accept_fd(struct connection *cli_conn) MSG_DONTWAIT|MSG_NOSIGNAL); } - if (fdtab[cfd].owner) - fd_delete(cfd); - else - close(cfd); + conn_stop_tracking(cli_conn); + conn_full_close(cli_conn); + conn_free(cli_conn); + listener_release(l); return ret; }