MEDIUM: stream: move the listener's pointer to the session
The listener is session-specific, move it there.
diff --git a/src/stream.c b/src/stream.c
index e81de2a..290c565 100644
--- a/src/stream.c
+++ b/src/stream.c
@@ -121,7 +121,7 @@
if (!s->sess)
goto out_free_stream;
- s->listener = l;
+ s->sess->listener = l;
s->fe = p;
s->si[0].flags = SI_FL_NONE;
@@ -275,23 +275,24 @@
char pn[INET6_ADDRSTRLEN];
int ret;
char *end;
+ struct session *sess = s->sess;
struct connection *cli_conn = __objt_conn(s->target);
ret = addr_to_str(&cli_conn->addr.from, pn, sizeof(pn));
if (ret <= 0)
chunk_printf(&trash, "unknown [");
else if (ret == AF_UNIX)
- chunk_printf(&trash, "%s:%d [", pn, s->listener->luid);
+ chunk_printf(&trash, "%s:%d [", pn, sess->listener->luid);
else
chunk_printf(&trash, "%s:%d [", pn, get_host_port(&cli_conn->addr.from));
get_localtime(s->logs.accept_date.tv_sec, &tm);
end = date2str_log(trash.str + trash.len, &tm, &(s->logs.accept_date), trash.size - trash.len);
trash.len = end - trash.str;
- if (s->listener->name)
- chunk_appendf(&trash, "] %s/%s", s->fe->id, s->listener->name);
+ if (sess->listener->name)
+ chunk_appendf(&trash, "] %s/%s", s->fe->id, sess->listener->name);
else
- chunk_appendf(&trash, "] %s/%d", s->fe->id, s->listener->luid);
+ chunk_appendf(&trash, "] %s/%d", s->fe->id, sess->listener->luid);
}
/* This function kills an existing embryonic stream. It stops the connection's
@@ -302,6 +303,7 @@
static void kill_mini_session(struct stream *s)
{
int level = LOG_INFO;
+ struct session *sess = s->sess;
struct connection *conn = __objt_conn(s->target);
unsigned int log = s->logs.logwait;
const char *err_msg;
@@ -341,12 +343,12 @@
s->fe->feconn--;
stream_store_counters(s);
- if (!(s->listener->options & LI_O_UNLIMITED))
+ if (!(sess->listener->options & LI_O_UNLIMITED))
actconn--;
jobs--;
- s->listener->nbconn--;
- if (s->listener->state == LI_FULL)
- resume_listener(s->listener);
+ sess->listener->nbconn--;
+ if (sess->listener->state == LI_FULL)
+ resume_listener(sess->listener);
/* Dequeues all of the listeners waiting for a resource */
if (!LIST_ISEMPTY(&global_listener_queue))
@@ -419,7 +421,8 @@
*/
int stream_complete(struct stream *s)
{
- struct listener *l = s->listener;
+ struct session *sess = s->sess;
+ struct listener *l = sess->listener;
struct proxy *p = s->fe;
struct http_txn *txn;
struct task *t = s->task;
@@ -804,6 +807,7 @@
void stream_process_counters(struct stream *s)
{
+ struct session *sess = s->sess;
unsigned long long bytes;
void *ptr;
int i;
@@ -818,8 +822,8 @@
if (objt_server(s->target))
objt_server(s->target)->counters.bytes_in += bytes;
- if (s->listener && s->listener->counters)
- s->listener->counters->bytes_in += bytes;
+ if (sess->listener && sess->listener->counters)
+ sess->listener->counters->bytes_in += bytes;
for (i = 0; i < MAX_SESS_STKCTR; i++) {
if (!stkctr_entry(&s->stkctr[i]))
@@ -850,8 +854,8 @@
if (objt_server(s->target))
objt_server(s->target)->counters.bytes_out += bytes;
- if (s->listener && s->listener->counters)
- s->listener->counters->bytes_out += bytes;
+ if (sess->listener && sess->listener->counters)
+ sess->listener->counters->bytes_out += bytes;
for (i = 0; i < MAX_SESS_STKCTR; i++) {
if (!stkctr_entry(&s->stkctr[i]))
@@ -1271,8 +1275,8 @@
if (s->si[1].state < SI_ST_REQ) {
s->fe->fe_counters.failed_req++;
- if (s->listener->counters)
- s->listener->counters->failed_req++;
+ if (strm_sess(s)->listener->counters)
+ strm_sess(s)->listener->counters->failed_req++;
s->flags |= SF_FINST_R;
}
@@ -1754,6 +1758,7 @@
{
struct server *srv;
struct stream *s = t->context;
+ struct session *sess = s->sess;
unsigned int rqf_last, rpf_last;
unsigned int rq_prod_last, rq_cons_last;
unsigned int rp_cons_last, rp_prod_last;
@@ -2685,12 +2690,12 @@
if (s->flags & SF_BE_ASSIGNED)
s->be->beconn--;
jobs--;
- if (s->listener) {
- if (!(s->listener->options & LI_O_UNLIMITED))
+ if (sess->listener) {
+ if (!(sess->listener->options & LI_O_UNLIMITED))
actconn--;
- s->listener->nbconn--;
- if (s->listener->state == LI_FULL)
- resume_listener(s->listener);
+ sess->listener->nbconn--;
+ if (sess->listener->state == LI_FULL)
+ resume_listener(sess->listener);
/* Dequeues all of the listeners waiting for a resource */
if (!LIST_ISEMPTY(&global_listener_queue))