Commit a8c8b4fa authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

If after handling a request we find anything in our input buffer,

don't waste time putting the session on the herder, but go right
back and take the next request in the current worker thread.



git-svn-id: http://www.varnish-cache.org/svn/trunk/varnish-cache@982 d4fa192b-c00b-0410-8231-f00ffab90ce4
parent fc9e8beb
......@@ -158,14 +158,6 @@ vca_return_session(struct sess *sp)
CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
AZ(sp->obj);
AZ(sp->vcl);
if (sp->fd >= 0) {
VSL(SLT_SessionReuse, sp->fd, "%s %s", sp->addr, sp->port);
sp->t_open = sp->t_end;
if (http_RecvPrepAgain(sp->http)) {
vca_handover(sp, 0);
return;
}
}
vca_act->recycle(sp);
}
......
......@@ -40,6 +40,39 @@ DOT start -> RECV
static unsigned xids;
/*--------------------------------------------------------------------
* The very first request
*/
static int
cnt_again(struct sess *sp)
{
int i;
assert(sp->xid == 0);
sp->wrk->idle = sp->t_open.tv_sec;
if (http_RecvPrepAgain(sp->http)) {
sp->step = STP_RECV;
return (0);
}
do
i = http_RecvSome(sp->fd, sp->http);
while (i == -1);
if (i == 0) {
sp->step = STP_RECV;
return (0);
}
if (i == 1)
vca_close_session(sp, "overflow");
else if (i == 2)
vca_close_session(sp, "no request");
else
INCOMPL();
sp->step = STP_DONE;
return (0);
}
/*--------------------------------------------------------------------
* We have a refcounted object on the session, now deliver it.
*
......@@ -120,6 +153,23 @@ cnt_done(struct sess *sp)
(long)sp->t_end.tv_sec, (long)sp->t_end.tv_nsec,
dh, dp, da);
sp->xid = 0;
sp->t_open = sp->t_end;
if (sp->fd > 0) {
VSL(SLT_SessionReuse, sp->fd, "%s %s", sp->addr, sp->port);
/* If we have anything in the input buffer, start over */
/*
* XXX: we might even want to do a short timed read (poll)
* XXX: here to see if something is pending in the kernel
*/
if (sp->http->t < sp->http->v) {
sp->step = STP_AGAIN;
return (0);
}
}
SES_Charge(sp);
vca_return_session(sp);
return (1);
......
/* $Id$ */
STEP(again, AGAIN)
STEP(first, FIRST)
STEP(recv, RECV)
STEP(pipe, PIPE)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment