[master] e920df6 Get struct sess back down to 128 bytes.
Poul-Henning Kamp
phk at FreeBSD.org
Wed Feb 10 10:44:26 CET 2016
commit e920df6115ff9745635c26b88cbaf7884677fb5e
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Wed Feb 10 09:43:54 2016 +0000
Get struct sess back down to 128 bytes.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 27c32d3..36ecde1 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -635,7 +635,6 @@ struct sess {
#define SESS_MAGIC 0x2c2f9c5a
enum sess_step sess_step;
- const struct transport *transport;
struct lock mtx;
int fd;
uint32_t vxid;
@@ -944,10 +943,10 @@ void CNT_AcctLogCharge(struct dstat *, struct req *);
/* cache_session.c [SES] */
struct sess *SES_New(struct pool *);
-void SES_Close(struct sess *sp, enum sess_close reason);
-void SES_Wait(struct sess *sp);
-void SES_Delete(struct sess *sp, enum sess_close reason, double now);
-void SES_NewPool(struct pool *pp, unsigned pool_no);
+void SES_Close(struct sess *, enum sess_close reason);
+void SES_Wait(struct sess *, const struct transport *);
+void SES_Delete(struct sess *, enum sess_close reason, double now);
+void SES_NewPool(struct pool *, unsigned pool_no);
int SES_Reschedule_Req(struct req *);
enum htc_status_e {
diff --git a/bin/varnishd/cache/cache_acceptor.c b/bin/varnishd/cache/cache_acceptor.c
index f6d6f82..6a701ea 100644
--- a/bin/varnishd/cache/cache_acceptor.c
+++ b/bin/varnishd/cache/cache_acceptor.c
@@ -377,9 +377,8 @@ vca_make_session(struct worker *wrk, void *arg)
req->htc->fd = sp->fd;
SES_RxInit(req->htc, req->ws,
cache_param->http_req_size, cache_param->http_req_hdr_len);
-
- sp->transport = wa->acceptlsock->transport;
- wrk->task.func = sp->transport->new_session;
+
+ wrk->task.func = wa->acceptlsock->transport->new_session;
wrk->task.priv = req;
}
diff --git a/bin/varnishd/cache/cache_backend_tcp.c b/bin/varnishd/cache/cache_backend_tcp.c
index 13a026c..8ad54e3 100644
--- a/bin/varnishd/cache/cache_backend_tcp.c
+++ b/bin/varnishd/cache/cache_backend_tcp.c
@@ -83,7 +83,7 @@ tcp_handle(struct waited *w, enum wait_event ev, double now)
struct vbc *vbc;
struct tcp_pool *tp;
- CAST_OBJ_NOTNULL(vbc, w->ptr, VBC_MAGIC);
+ CAST_OBJ_NOTNULL(vbc, w->priv1, VBC_MAGIC);
(void)ev;
(void)now;
CHECK_OBJ_NOTNULL(vbc->tcp_pool, TCP_POOL_MAGIC);
@@ -264,7 +264,7 @@ VBT_Recycle(const struct worker *wrk, struct tcp_pool *tp, struct vbc **vbcp)
Lck_Lock(&tp->mtx);
tp->n_used--;
- vbc->waited->ptr = vbc;
+ vbc->waited->priv1 = vbc;
vbc->waited->fd = vbc->fd;
vbc->waited->idle = VTIM_real();
vbc->state = VBC_STATE_AVAIL;
diff --git a/bin/varnishd/cache/cache_panic.c b/bin/varnishd/cache/cache_panic.c
index 97a697e..0a2cedf 100644
--- a/bin/varnishd/cache/cache_panic.c
+++ b/bin/varnishd/cache/cache_panic.c
@@ -380,7 +380,8 @@ pan_req(struct vsb *vsb, const struct req *req)
return;
VSB_indent(vsb, 2);
- VSB_printf(vsb, "vxid = %u, ", VXID(req->vsl->wid));
+ VSB_printf(vsb, "vxid = %u, transport = %s", VXID(req->vsl->wid),
+ req->transport == NULL ? "NULL" : req->transport->name);
switch (req->req_step) {
#define REQ_STEP(l, u, arg) case R_STP_##u: stp = "R_STP_" #u; break;
@@ -449,8 +450,8 @@ pan_sess(struct vsb *vsb, const struct sess *sp)
if (pan_already(vsb, sp))
return;
VSB_indent(vsb, 2);
- VSB_printf(vsb, "fd = %d, vxid = %u, xport = %s\n",
- sp->fd, VXID(sp->vxid), sp->transport->name);
+ VSB_printf(vsb, "fd = %d, vxid = %u\n",
+ sp->fd, VXID(sp->vxid));
AZ(SES_Get_client_ip(sp, &ci));
AZ(SES_Get_client_port(sp, &cp));
VSB_printf(vsb, "client = %s %s,\n", ci, cp);
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index 770ce73..9775332 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -335,9 +335,12 @@ ses_handle(struct waited *wp, enum wait_event ev, double now)
struct sess *sp;
struct pool *pp;
struct pool_task *tp;
+ const struct transport *xp;
CHECK_OBJ_NOTNULL(wp, WAITED_MAGIC);
- CAST_OBJ_NOTNULL(sp, wp->ptr, SESS_MAGIC);
+ CAST_OBJ_NOTNULL(sp, wp->priv1, SESS_MAGIC);
+ CAST_OBJ_NOTNULL(xp, (const void*)wp->priv2, TRANSPORT_MAGIC);
+ AN(wp->priv2);
assert((void *)sp->ws->f == wp);
wp->magic = 0;
wp = NULL;
@@ -356,7 +359,7 @@ ses_handle(struct waited *wp, enum wait_event ev, double now)
CHECK_OBJ_NOTNULL(pp, POOL_MAGIC);
assert(sizeof *tp <= WS_Reserve(sp->ws, sizeof *tp));
tp = (void*)sp->ws->f;
- tp->func = sp->transport->unwait;
+ tp->func = xp->unwait;
tp->priv = sp;
if (Pool_Task(pp, tp, TASK_QUEUE_REQ))
SES_Delete(sp, SC_OVERLOAD, now);
@@ -373,12 +376,13 @@ ses_handle(struct waited *wp, enum wait_event ev, double now)
*/
void
-SES_Wait(struct sess *sp)
+SES_Wait(struct sess *sp, const struct transport *xp)
{
struct pool *pp;
struct waited *wp;
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+ CHECK_OBJ_NOTNULL(xp, TRANSPORT_MAGIC);
pp = sp->pool;
CHECK_OBJ_NOTNULL(pp, POOL_MAGIC);
/*
@@ -400,7 +404,8 @@ SES_Wait(struct sess *sp)
wp = (void*)sp->ws->f;
INIT_OBJ(wp, WAITED_MAGIC);
wp->fd = sp->fd;
- wp->ptr = sp;
+ wp->priv1 = sp;
+ wp->priv2 = (uintptr_t)xp;
wp->idle = sp->t_idle;
wp->waitfor = &pp->wf;
if (Wait_Enter(pp->waiter, wp))
diff --git a/bin/varnishd/http1/cache_http1_fsm.c b/bin/varnishd/http1/cache_http1_fsm.c
index 67274c1..dff2f0a 100644
--- a/bin/varnishd/http1/cache_http1_fsm.c
+++ b/bin/varnishd/http1/cache_http1_fsm.c
@@ -38,6 +38,7 @@
#include <stdlib.h>
#include "cache/cache.h"
+#include "common/heritage.h"
#include "cache/cache_transport.h"
#include "cache_http1.h"
#include "hash/hash_slinger.h"
@@ -57,7 +58,7 @@ http1_req(struct worker *wrk, void *arg)
CAST_OBJ_NOTNULL(req, arg, REQ_MAGIC);
THR_SetRequest(req);
- req->transport = req->sp->transport;
+ req->transport = &HTTP1_transport;
AZ(wrk->aws->r);
HTTP1_Session(wrk, req);
AZ(wrk->v1l);
@@ -289,7 +290,7 @@ HTTP1_Session(struct worker *wrk, struct req *req)
if (hs == HTC_S_IDLE) {
wrk->stats->sess_herd++;
Req_Release(req);
- SES_Wait(sp);
+ SES_Wait(sp, &HTTP1_transport);
return;
}
if (hs != HTC_S_COMPLETE)
diff --git a/bin/varnishd/proxy/cache_proxy_proto.c b/bin/varnishd/proxy/cache_proxy_proto.c
index 061d1be..8290c7d 100644
--- a/bin/varnishd/proxy/cache_proxy_proto.c
+++ b/bin/varnishd/proxy/cache_proxy_proto.c
@@ -379,8 +379,7 @@ vpx_new_session(struct worker *wrk, void *arg)
else
req->htc->pipeline_e = req->htc->rxbuf_e;
SES_RxReInit(req->htc);
- sp->transport = &HTTP1_transport;
- wrk->task.func = sp->transport->new_session;
+ wrk->task.func = HTTP1_transport.new_session;
wrk->task.priv = req;
}
diff --git a/bin/varnishd/waiter/waiter.h b/bin/varnishd/waiter/waiter.h
index 488c8e3..4cbabb6 100644
--- a/bin/varnishd/waiter/waiter.h
+++ b/bin/varnishd/waiter/waiter.h
@@ -66,7 +66,8 @@ struct waited {
#define WAITED_MAGIC 0x1743992d
int fd;
unsigned idx;
- void *ptr;
+ void *priv1;
+ uintptr_t priv2;
const struct waitfor *waitfor;
double idle;
};
More information about the varnish-commit
mailing list