[master] 3d186d9 Relieve waiters of the task of receiving the request header, instead throw the session at a worker thread the moment it becomes readable.
Poul-Henning Kamp
phk at varnish-cache.org
Thu Dec 22 22:39:46 CET 2011
commit 3d186d949c28d7a5cef6a0b82eb9a22df21bad62
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Dec 22 21:38:58 2011 +0000
Relieve waiters of the task of receiving the request header, instead
throw the session at a worker thread the moment it becomes readable.
diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index bcf4f54..58419bc 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -920,8 +920,7 @@ void SES_Charge(struct sess *sp);
struct sesspool *SES_NewPool(struct pool *pp, unsigned pool_no);
void SES_DeletePool(struct sesspool *sp, struct worker *wrk);
int SES_Schedule(struct sess *sp);
-void SES_Handle(struct sess *sp, int status);
-
+void SES_Handle(struct sess *sp);
/* cache_shmlog.c */
extern struct VSC_C_main *VSC_C_main;
diff --git a/bin/varnishd/cache/cache_center.c b/bin/varnishd/cache/cache_center.c
index 333db31..1d92ded 100644
--- a/bin/varnishd/cache/cache_center.c
+++ b/bin/varnishd/cache/cache_center.c
@@ -1675,7 +1675,7 @@ CNT_Session(struct sess *sp)
*/
assert(
sp->step == STP_FIRST ||
- sp->step == STP_START ||
+ sp->step == STP_WAIT ||
sp->step == STP_LOOKUP ||
sp->step == STP_RECV);
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index 790ea2c..9c5e82b 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -279,23 +279,11 @@ SES_Schedule(struct sess *sp)
*/
void
-SES_Handle(struct sess *sp, int status)
+SES_Handle(struct sess *sp)
{
- switch (status) {
- case -2:
- SES_Delete(sp, "blast");
- break;
- case -1:
- SES_Delete(sp, "no request");
- break;
- case 1:
- sp->step = STP_START;
- (void)SES_Schedule(sp);
- break;
- default:
- WRONG("Unexpected return from HTC_Rx()");
- }
+ sp->step = STP_WAIT;
+ (void)SES_Schedule(sp);
}
/*--------------------------------------------------------------------
diff --git a/bin/varnishd/waiter/cache_waiter_epoll.c b/bin/varnishd/waiter/cache_waiter_epoll.c
index ca0d29f..e71633a 100644
--- a/bin/varnishd/waiter/cache_waiter_epoll.c
+++ b/bin/varnishd/waiter/cache_waiter_epoll.c
@@ -129,13 +129,8 @@ vwe_eev(struct vwe *vwe, const struct epoll_event *ep)
} else {
CAST_OBJ_NOTNULL(sp, ep->data.ptr, SESS_MAGIC);
if (ep->events & EPOLLIN || ep->events & EPOLLPRI) {
- i = HTC_Rx(sp->htc);
- if (i == 0) {
- vwe_modadd(vwe, sp->fd, sp, EPOLL_CTL_MOD);
- return; /* more needed */
- }
VTAILQ_REMOVE(&vwe->sesshead, sp, list);
- SES_Handle(sp, i);
+ SES_Handle(sp);
} else if (ep->events & EPOLLERR) {
VTAILQ_REMOVE(&vwe->sesshead, sp, list);
SES_Delete(sp, "ERR");
diff --git a/bin/varnishd/waiter/cache_waiter_kqueue.c b/bin/varnishd/waiter/cache_waiter_kqueue.c
index 7dcf7f5..e11f945 100644
--- a/bin/varnishd/waiter/cache_waiter_kqueue.c
+++ b/bin/varnishd/waiter/cache_waiter_kqueue.c
@@ -116,7 +116,6 @@ vwk_pipe_ev(struct vwk *vwk, const struct kevent *kp)
static void
vwk_sess_ev(struct vwk *vwk, const struct kevent *kp)
{
- int i;
struct sess *sp;
AN(kp->udata);
@@ -129,13 +128,8 @@ vwk_sess_ev(struct vwk *vwk, const struct kevent *kp)
assert((sp->vsl_id & VSL_IDENTMASK) == kp->ident);
assert((sp->vsl_id & VSL_IDENTMASK) == sp->fd);
if (kp->data > 0) {
- i = HTC_Rx(sp->htc);
- if (i == 0) {
- vwk_kq_sess(vwk, sp, EV_ADD | EV_ONESHOT);
- return; /* more needed */
- }
VTAILQ_REMOVE(&vwk->sesshead, sp, list);
- SES_Handle(sp, i);
+ SES_Handle(sp);
return;
} else if (kp->flags & EV_EOF) {
VTAILQ_REMOVE(&vwk->sesshead, sp, list);
diff --git a/bin/varnishd/waiter/cache_waiter_poll.c b/bin/varnishd/waiter/cache_waiter_poll.c
index 681b48d..cf750ad 100644
--- a/bin/varnishd/waiter/cache_waiter_poll.c
+++ b/bin/varnishd/waiter/cache_waiter_poll.c
@@ -153,20 +153,10 @@ vwp_main(void *priv)
assert(vwp->pollfd[fd].fd == fd);
if (vwp->pollfd[fd].revents) {
v2--;
- i = HTC_Rx(sp->htc);
- if (vwp->pollfd[fd].revents != POLLIN)
- VSL(SLT_Debug, fd, "Poll: %x / %d",
- vwp->pollfd[fd].revents, i);
vwp->pollfd[fd].revents = 0;
VTAILQ_REMOVE(&vwp->sesshead, sp, list);
- if (i == 0) {
- /* Mov to front of list for speed */
- VTAILQ_INSERT_HEAD(&vwp->sesshead,
- sp, list);
- } else {
- vwp_unpoll(vwp, fd);
- SES_Handle(sp, i);
- }
+ vwp_unpoll(vwp, fd);
+ SES_Handle(sp);
} else if (sp->t_open <= deadline) {
VTAILQ_REMOVE(&vwp->sesshead, sp, list);
vwp_unpoll(vwp, fd);
diff --git a/bin/varnishd/waiter/cache_waiter_ports.c b/bin/varnishd/waiter/cache_waiter_ports.c
index 7717196..09db406 100644
--- a/bin/varnishd/waiter/cache_waiter_ports.c
+++ b/bin/varnishd/waiter/cache_waiter_ports.c
@@ -90,13 +90,6 @@ vws_port_ev(struct vws *vws, port_event_t *ev) {
SES_Delete(sp, "EOF");
return;
}
- i = HTC_Rx(sp->htc);
-
- if (i == 0) {
- /* incomplete header, wait for more data */
- vws_add(vws, sp->fd, sp);
- return;
- }
/*
* note: the original man page for port_associate(3C) states:
@@ -115,7 +108,7 @@ vws_port_ev(struct vws *vws, port_event_t *ev) {
VTAILQ_REMOVE(&vws->sesshead, sp, list);
/* SES_Handle will also handle errors */
- SES_Handle(sp, i);
+ SES_Handle(sp);
}
return;
}
More information about the varnish-commit
mailing list