CLEANUP: session: simplify references to chn_{prod,cons}(&s->{req,res})
These 4 combinations are needlessly complicated since the session already
has direct access to the associated stream interfaces without having to
check an indirect pointer.
diff --git a/src/session.c b/src/session.c
index 41b5af1..053e4a2 100644
--- a/src/session.c
+++ b/src/session.c
@@ -1084,7 +1084,7 @@
s->req, s->rep,
s->req.rex, s->res.wex,
s->req.flags, s->res.flags,
- s->req.buf->i, s->req.buf->o, s->res.buf->i, s->res.buf->o, chn_cons(&s->res)->state, s->req.cons->state);
+ s->req.buf->i, s->req.buf->o, s->res.buf->i, s->res.buf->o, s->si[0].state, s->req.cons->state);
if (si->state == SI_ST_ASS) {
/* Server assigned to connection request, we have to try to connect now */
@@ -1276,7 +1276,7 @@
s->req, s->rep,
s->req.rex, s->res.wex,
s->req.flags, s->res.flags,
- s->req.buf->i, s->req.buf->o, s->res.buf->i, s->res.buf->o, chn_cons(&s->res)->state, s->req.cons->state);
+ s->req.buf->i, s->req.buf->o, s->res.buf->i, s->res.buf->o, s->si[0].state, s->req.cons->state);
if (si->state != SI_ST_REQ)
return;
@@ -1766,27 +1766,27 @@
channel_check_timeouts(&s->req);
if (unlikely((s->req.flags & (CF_SHUTW|CF_WRITE_TIMEOUT)) == CF_WRITE_TIMEOUT)) {
- chn_cons(&s->req)->flags |= SI_FL_NOLINGER;
- si_shutw(chn_cons(&s->req));
+ s->si[1].flags |= SI_FL_NOLINGER;
+ si_shutw(&s->si[1]);
}
if (unlikely((s->req.flags & (CF_SHUTR|CF_READ_TIMEOUT)) == CF_READ_TIMEOUT)) {
- if (chn_prod(&s->req)->flags & SI_FL_NOHALF)
- chn_prod(&s->req)->flags |= SI_FL_NOLINGER;
- si_shutr(chn_prod(&s->req));
+ if (s->si[0].flags & SI_FL_NOHALF)
+ s->si[0].flags |= SI_FL_NOLINGER;
+ si_shutr(&s->si[0]);
}
channel_check_timeouts(&s->res);
if (unlikely((s->res.flags & (CF_SHUTW|CF_WRITE_TIMEOUT)) == CF_WRITE_TIMEOUT)) {
- chn_cons(&s->res)->flags |= SI_FL_NOLINGER;
- si_shutw(chn_cons(&s->res));
+ s->si[0].flags |= SI_FL_NOLINGER;
+ si_shutw(&s->si[0]);
}
if (unlikely((s->res.flags & (CF_SHUTR|CF_READ_TIMEOUT)) == CF_READ_TIMEOUT)) {
- if (chn_prod(&s->res)->flags & SI_FL_NOHALF)
- chn_prod(&s->res)->flags |= SI_FL_NOLINGER;
- si_shutr(chn_prod(&s->res));
+ if (s->si[1].flags & SI_FL_NOHALF)
+ s->si[1].flags |= SI_FL_NOLINGER;
+ si_shutr(&s->si[1]);
}
/* Once in a while we're woken up because the task expires. But
@@ -1891,19 +1891,19 @@
s->req, s->rep,
s->req.rex, s->res.wex,
s->req.flags, s->res.flags,
- s->req.buf->i, s->req.buf->o, s->res.buf->i, s->res.buf->o, chn_cons(&s->res)->state, chn_cons(&s->req)->state,
- chn_cons(&s->res)->err_type, chn_cons(&s->req)->err_type,
- chn_cons(&s->req)->conn_retries);
+ s->req.buf->i, s->req.buf->o, s->res.buf->i, s->res.buf->o, s->si[0].state, s->si[1].state,
+ s->si[0].err_type, s->si[1].err_type,
+ s->si[1].conn_retries);
/* nothing special to be done on client side */
- if (unlikely(chn_prod(&s->req)->state == SI_ST_DIS))
- chn_prod(&s->req)->state = SI_ST_CLO;
+ if (unlikely(s->si[0].state == SI_ST_DIS))
+ s->si[0].state = SI_ST_CLO;
/* When a server-side connection is released, we have to count it and
* check for pending connections on this server.
*/
- if (unlikely(chn_cons(&s->req)->state == SI_ST_DIS)) {
- chn_cons(&s->req)->state = SI_ST_CLO;
+ if (unlikely(s->si[1].state == SI_ST_DIS)) {
+ s->si[1].state = SI_ST_CLO;
srv = objt_server(s->target);
if (srv) {
if (s->flags & SN_CURR_SESS) {
@@ -1930,7 +1930,7 @@
s->task->state & TASK_WOKEN_MSG) {
unsigned int flags = s->req.flags;
- if (chn_prod(&s->req)->state >= SI_ST_EST) {
+ if (s->si[0].state >= SI_ST_EST) {
int max_loops = global.tune.maxpollevents;
unsigned int ana_list;
unsigned int ana_back;
@@ -2101,7 +2101,7 @@
s->req.flags |= CF_WAKE_ONCE;
}
- if (chn_prod(&s->res)->state >= SI_ST_EST) {
+ if (s->si[1].state >= SI_ST_EST) {
int max_loops = global.tune.maxpollevents;
unsigned int ana_list;
unsigned int ana_back;
@@ -2271,7 +2271,7 @@
*/
if (unlikely(!s->req.analysers &&
!(s->req.flags & (CF_SHUTW|CF_SHUTR_NOW)) &&
- (chn_prod(&s->req)->state >= SI_ST_EST) &&
+ (s->si[0].state >= SI_ST_EST) &&
(s->req.to_forward != CHN_INFINITE_FORWARD))) {
/* This buffer is freewheeling, there's no analyser
* attached to it. If any data are left in, we'll permit them to
@@ -2327,8 +2327,8 @@
if (unlikely((s->req.flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW &&
channel_is_empty(&s->req))) {
if (s->req.flags & CF_READ_ERROR)
- chn_cons(&s->req)->flags |= SI_FL_NOLINGER;
- si_shutw(chn_cons(&s->req));
+ s->si[1].flags |= SI_FL_NOLINGER;
+ si_shutw(&s->si[1]);
if (tick_isset(s->be->timeout.serverfin)) {
s->res.rto = s->be->timeout.serverfin;
s->res.rex = tick_add(now_ms, s->res.rto);
@@ -2342,9 +2342,9 @@
/* shutdown(read) pending */
if (unlikely((s->req.flags & (CF_SHUTR|CF_SHUTR_NOW)) == CF_SHUTR_NOW)) {
- if (chn_prod(&s->req)->flags & SI_FL_NOHALF)
- chn_prod(&s->req)->flags |= SI_FL_NOLINGER;
- si_shutr(chn_prod(&s->req));
+ if (s->si[0].flags & SI_FL_NOHALF)
+ s->si[0].flags |= SI_FL_NOLINGER;
+ si_shutr(&s->si[0]);
if (tick_isset(s->fe->timeout.clientfin)) {
s->res.wto = s->fe->timeout.clientfin;
s->res.wex = tick_add(now_ms, s->res.wto);
@@ -2356,19 +2356,19 @@
* - there are data scheduled for emission in the buffer
* - the CF_AUTO_CONNECT flag is set (active connection)
*/
- if (chn_cons(&s->req)->state == SI_ST_INI) {
+ if (s->si[1].state == SI_ST_INI) {
if (!(s->req.flags & CF_SHUTW)) {
if ((s->req.flags & CF_AUTO_CONNECT) || !channel_is_empty(&s->req)) {
/* If we have an appctx, there is no connect method, so we
* immediately switch to the connected state, otherwise we
* perform a connection request.
*/
- chn_cons(&s->req)->state = SI_ST_REQ; /* new connection requested */
- chn_cons(&s->req)->conn_retries = s->be->conn_retries;
+ s->si[1].state = SI_ST_REQ; /* new connection requested */
+ s->si[1].conn_retries = s->be->conn_retries;
}
}
else {
- chn_cons(&s->req)->state = SI_ST_CLO; /* shutw+ini = abort */
+ s->si[1].state = SI_ST_CLO; /* shutw+ini = abort */
channel_shutw_now(&s->req); /* fix buffer flags upon abort */
channel_shutr_now(&s->res);
}
@@ -2411,7 +2411,7 @@
}
/* Benchmarks have shown that it's optimal to do a full resync now */
- if (chn_prod(&s->req)->state == SI_ST_DIS || chn_cons(&s->req)->state == SI_ST_DIS)
+ if (s->si[0].state == SI_ST_DIS || s->si[1].state == SI_ST_DIS)
goto resync_stream_interface;
/* otherwise we want to check if we need to resync the req buffer or not */
@@ -2427,7 +2427,7 @@
*/
if (unlikely(!s->res.analysers &&
!(s->res.flags & (CF_SHUTW|CF_SHUTR_NOW)) &&
- (chn_prod(&s->res)->state >= SI_ST_EST) &&
+ (s->si[1].state >= SI_ST_EST) &&
(s->res.to_forward != CHN_INFINITE_FORWARD))) {
/* This buffer is freewheeling, there's no analyser
* attached to it. If any data are left in, we'll permit them to
@@ -2504,7 +2504,7 @@
/* shutdown(write) pending */
if (unlikely((s->res.flags & (CF_SHUTW|CF_SHUTW_NOW)) == CF_SHUTW_NOW &&
channel_is_empty(&s->res))) {
- si_shutw(chn_cons(&s->res));
+ si_shutw(&s->si[0]);
if (tick_isset(s->fe->timeout.clientfin)) {
s->req.rto = s->fe->timeout.clientfin;
s->req.rex = tick_add(now_ms, s->req.rto);
@@ -2518,16 +2518,16 @@
/* shutdown(read) pending */
if (unlikely((s->res.flags & (CF_SHUTR|CF_SHUTR_NOW)) == CF_SHUTR_NOW)) {
- if (chn_prod(&s->res)->flags & SI_FL_NOHALF)
- chn_prod(&s->res)->flags |= SI_FL_NOLINGER;
- si_shutr(chn_prod(&s->res));
+ if (s->si[1].flags & SI_FL_NOHALF)
+ s->si[1].flags |= SI_FL_NOLINGER;
+ si_shutr(&s->si[1]);
if (tick_isset(s->be->timeout.serverfin)) {
s->req.wto = s->be->timeout.serverfin;
s->req.wex = tick_add(now_ms, s->req.wto);
}
}
- if (chn_prod(&s->req)->state == SI_ST_DIS || chn_cons(&s->req)->state == SI_ST_DIS)
+ if (s->si[0].state == SI_ST_DIS || s->si[1].state == SI_ST_DIS)
goto resync_stream_interface;
if (s->req.flags != rqf_last)
@@ -2537,8 +2537,8 @@
goto resync_response;
/* we're interested in getting wakeups again */
- chn_prod(&s->req)->flags &= ~SI_FL_DONT_WAKE;
- chn_cons(&s->req)->flags &= ~SI_FL_DONT_WAKE;
+ s->si[0].flags &= ~SI_FL_DONT_WAKE;
+ s->si[1].flags &= ~SI_FL_DONT_WAKE;
/* This is needed only when debugging is enabled, to indicate
* client-side or server-side close. Please note that in the unlikely
@@ -2567,17 +2567,17 @@
}
}
- if (likely((chn_cons(&s->res)->state != SI_ST_CLO) ||
- (chn_cons(&s->req)->state > SI_ST_INI && chn_cons(&s->req)->state < SI_ST_CLO))) {
+ if (likely((s->si[0].state != SI_ST_CLO) ||
+ (s->si[1].state > SI_ST_INI && s->si[1].state < SI_ST_CLO))) {
if ((s->fe->options & PR_O_CONTSTATS) && (s->flags & SN_BE_ASSIGNED))
session_process_counters(s);
- if (chn_cons(&s->res)->state == SI_ST_EST && obj_type(chn_cons(&s->res)->end) != OBJ_TYPE_APPCTX)
- si_update(chn_cons(&s->res));
+ if (s->si[0].state == SI_ST_EST && obj_type(s->si[0].end) != OBJ_TYPE_APPCTX)
+ si_update(&s->si[0]);
- if (chn_cons(&s->req)->state == SI_ST_EST && obj_type(chn_cons(&s->req)->end) != OBJ_TYPE_APPCTX)
- si_update(chn_cons(&s->req));
+ if (s->si[1].state == SI_ST_EST && obj_type(s->si[1].end) != OBJ_TYPE_APPCTX)
+ si_update(&s->si[1]);
s->req.flags &= ~(CF_READ_NULL|CF_READ_PARTIAL|CF_WRITE_NULL|CF_WRITE_PARTIAL|CF_READ_ATTACHED);
s->res.flags &= ~(CF_READ_NULL|CF_READ_PARTIAL|CF_WRITE_NULL|CF_WRITE_PARTIAL|CF_READ_ATTACHED);
@@ -2609,7 +2609,7 @@
* both functions are always called and that we wake up if at
* least one did something.
*/
- if ((si_applet_call(chn_cons(&s->req)) | si_applet_call(chn_cons(&s->res))) != 0) {
+ if ((si_applet_call(&s->si[1]) | si_applet_call(&s->si[0])) != 0) {
if (task_in_rq(t)) {
t->expire = TICK_ETERNITY;
session_release_buffers(s);