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 2673482..b065ff3 100644
--- a/src/session.c
+++ b/src/session.c
@@ -271,11 +271,8 @@
* 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 @@
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;
}