]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MINOR: session: simplify error path in session_accept_fd()
authorWilly Tarreau <w@1wt.eu>
Thu, 15 Oct 2020 05:11:14 +0000 (07:11 +0200)
committerWilly Tarreau <w@1wt.eu>
Thu, 15 Oct 2020 19:47:56 +0000 (21:47 +0200)
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

index 2673482ffd2c4e94aa946e91b882ed32c4902b42..b065ff3d229755f2dd9d0aaf8733b4c440c343d5 100644 (file)
@@ -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;
 }