From: Willy Tarreau Date: Thu, 15 Oct 2020 05:11:14 +0000 (+0200) Subject: MINOR: session: simplify error path in session_accept_fd() X-Git-Tag: v2.3-dev7~26 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=01ca149047c1dade3c4ecdf7bc0e65be564513ac;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/session.c b/src/session.c index 2673482ffd..b065ff3d22 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; }