CLEANUP: session: don't needlessly pass a pointer to the stream-int
All functions dealing with connection establishment currently use a
pointer to the stream interface. Now we know it cannot change and is
always s->si[1].
diff --git a/src/session.c b/src/session.c
index 83acc4e..428c34b 100644
--- a/src/session.c
+++ b/src/session.c
@@ -861,10 +861,11 @@
* SI_ST_CON (no change). The function returns 0 if it switches to SI_ST_CER,
* otherwise 1. This only works with connection-based sessions.
*/
-static int sess_update_st_con_tcp(struct session *s, struct stream_interface *si)
+static int sess_update_st_con_tcp(struct session *s)
{
- struct channel *req = si_oc(si);
- struct channel *rep = si_ic(si);
+ struct stream_interface *si = &s->si[1];
+ struct channel *req = &s->req;
+ struct channel *rep = &s->res;
struct connection *srv_conn = __objt_conn(si->end);
/* If we got an error, or if nothing happened and the connection timed
@@ -932,8 +933,10 @@
* and SI_ST_REQ when an immediate redispatch is wanted. The buffers are
* marked as in error state. It returns 0.
*/
-static int sess_update_st_cer(struct session *s, struct stream_interface *si)
+static int sess_update_st_cer(struct session *s)
{
+ struct stream_interface *si = &s->si[1];
+
/* we probably have to release last session from the server */
if (objt_server(s->target)) {
health_adjust(objt_server(s->target), HANA_STATUS_L4_ERR);
@@ -1029,10 +1032,11 @@
* SI_ST_EST state. It must only be called after switching from SI_ST_CON (or
* SI_ST_INI) to SI_ST_EST, but only when a ->proto is defined.
*/
-static void sess_establish(struct session *s, struct stream_interface *si)
+static void sess_establish(struct session *s)
{
- struct channel *req = si_oc(si);
- struct channel *rep = si_ic(si);
+ struct stream_interface *si = &s->si[1];
+ struct channel *req = &s->req;
+ struct channel *rep = &s->res;
/* First, centralize the timers information */
s->logs.t_connect = tv_ms_elapsed(&s->logs.tv_accept, &now);
@@ -1068,15 +1072,16 @@
req->wex = TICK_ETERNITY;
}
-/* Update stream interface status for input states SI_ST_ASS, SI_ST_QUE, SI_ST_TAR.
- * Other input states are simply ignored.
+/* Update back stream interface status for input states SI_ST_ASS, SI_ST_QUE,
+ * SI_ST_TAR. Other input states are simply ignored.
* Possible output states are SI_ST_CLO, SI_ST_TAR, SI_ST_ASS, SI_ST_REQ, SI_ST_CON
* and SI_ST_EST. Flags must have previously been updated for timeouts and other
* conditions.
*/
-static void sess_update_stream_int(struct session *s, struct stream_interface *si)
+static void sess_update_stream_int(struct session *s)
{
struct server *srv = objt_server(s->target);
+ struct stream_interface *si = &s->si[1];
DPRINTF(stderr,"[%u] %s: sess=%p rq=%p, rp=%p, exp(r,w)=%u,%u rqf=%08x rpf=%08x rqh=%d rqt=%d rph=%d rpt=%d cs=%d ss=%d\n",
now_ms, __FUNCTION__,
@@ -1143,7 +1148,7 @@
*/
si->state = SI_ST_CER;
si->flags &= ~SI_FL_ERR;
- sess_update_st_cer(s, si);
+ sess_update_st_cer(s);
/* now si->state is one of SI_ST_CLO, SI_ST_TAR, SI_ST_ASS, SI_ST_REQ */
return;
}
@@ -1268,8 +1273,10 @@
* or SI_ST_EST for a successful connection to an applet. It may also return
* SI_ST_QUE, or SI_ST_CLO upon error.
*/
-static void sess_prepare_conn_req(struct session *s, struct stream_interface *si)
+static void sess_prepare_conn_req(struct session *s)
{
+ struct stream_interface *si = &s->si[1];
+
DPRINTF(stderr,"[%u] %s: sess=%p rq=%p, rp=%p, exp(r,w)=%u,%u rqf=%08x rpf=%08x rqh=%d rqt=%d rph=%d rpt=%d cs=%d ss=%d\n",
now_ms, __FUNCTION__,
s,
@@ -1872,10 +1879,10 @@
/* we were trying to establish a connection on the server side,
* maybe it succeeded, maybe it failed, maybe we timed out, ...
*/
- if (unlikely(!sess_update_st_con_tcp(s, si_b)))
- sess_update_st_cer(s, si_b);
+ if (unlikely(!sess_update_st_con_tcp(s)))
+ sess_update_st_cer(s);
else if (si_b->state == SI_ST_EST)
- sess_establish(s, si_b);
+ sess_establish(s);
/* state is now one of SI_ST_CON (still in progress), SI_ST_EST
* (established), SI_ST_DIS (abort), SI_ST_CLO (last error),
@@ -2392,16 +2399,16 @@
* to give a chance to step 2 to perform a redirect if needed.
*/
if (si_b->state != SI_ST_REQ)
- sess_update_stream_int(s, si_b);
+ sess_update_stream_int(s);
if (si_b->state == SI_ST_REQ)
- sess_prepare_conn_req(s, si_b);
+ sess_prepare_conn_req(s);
/* applets directly go to the ESTABLISHED state. Similarly,
* servers experience the same fate when their connection
* is reused.
*/
if (unlikely(si_b->state == SI_ST_EST))
- sess_establish(s, si_b);
+ sess_establish(s);
/* Now we can add the server name to a header (if requested) */
/* check for HTTP mode and proxy server_name_hdr_name != NULL */