Mailing List Archive

r1685 - trunk/varnish-cache/bin/varnishd
Author: phk
Date: 2007-07-13 09:47:45 +0200 (Fri, 13 Jul 2007)
New Revision: 1685

Modified:
trunk/varnish-cache/bin/varnishd/cache.h
trunk/varnish-cache/bin/varnishd/cache_center.c
trunk/varnish-cache/bin/varnishd/cache_pool.c
Log:
Rename the "idle" field of struct worker to "used", which is more precise.

Don't use the "used" field to signal suicide for worker threads,
use the "wrq" field which is much more natural.

Set the "used" field to NAN before doing anything and assert that
somebody updated during the task.



Modified: trunk/varnish-cache/bin/varnishd/cache.h
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache.h 2007-07-13 07:27:50 UTC (rev 1684)
+++ trunk/varnish-cache/bin/varnishd/cache.h 2007-07-13 07:47:45 UTC (rev 1685)
@@ -149,7 +149,7 @@
struct objhead *nobjhead;
struct object *nobj;

- double idle;
+ double used;

int pipe[2];


Modified: trunk/varnish-cache/bin/varnishd/cache_center.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_center.c 2007-07-13 07:27:50 UTC (rev 1684)
+++ trunk/varnish-cache/bin/varnishd/cache_center.c 2007-07-13 07:47:45 UTC (rev 1685)
@@ -185,7 +185,7 @@
}

sp->t_end = TIM_real();
- sp->wrk->idle = sp->t_end;
+ sp->wrk->used = sp->t_end;
if (sp->xid == 0) {
sp->t_req = sp->t_end;
sp->t_resp = sp->t_end;
@@ -332,7 +332,7 @@

assert(sp->xid == 0);
VCA_Prep(sp);
- sp->wrk->idle = sp->t_open;
+ sp->wrk->used = sp->t_open;
sp->wrk->acct.sess++;
SES_RefSrcAddr(sp);
do
@@ -660,7 +660,7 @@
/* Update stats of various sorts */
VSL_stats->client_req++; /* XXX not locked */
sp->t_req = TIM_real();
- sp->wrk->idle = sp->t_req;
+ sp->wrk->used = sp->t_req;
sp->wrk->acct.req++;

/* Assign XID and log */

Modified: trunk/varnish-cache/bin/varnishd/cache_pool.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_pool.c 2007-07-13 07:27:50 UTC (rev 1684)
+++ trunk/varnish-cache/bin/varnishd/cache_pool.c 2007-07-13 07:47:45 UTC (rev 1685)
@@ -46,6 +46,7 @@

#include <errno.h>
#include <stdio.h>
+#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
@@ -181,6 +182,7 @@
struct workreq *wrq;

AN(w->wrq);
+ w->used = NAN;
wrq = w->wrq;
CHECK_OBJ_NOTNULL(wrq->sess, SESS_MAGIC);
wrq->sess->wrk = w;
@@ -193,6 +195,7 @@
CHECK_OBJ(w->nobj, OBJECT_MAGIC);
if (w->nobjhead != NULL)
CHECK_OBJ(w->nobjhead, OBJHEAD_MAGIC);
+ assert(!isnan(w->used));
w->wrq = NULL;
}

@@ -207,7 +210,7 @@
w = &ww;
memset(w, 0, sizeof *w);
w->magic = WORKER_MAGIC;
- w->idle = TIM_real();
+ w->used = TIM_real();
w->wlp = w->wlog;
w->wle = w->wlog + sizeof w->wlog;
AZ(pipe(w->pipe));
@@ -236,10 +239,10 @@

LOCK(&qp->mtx);
TAILQ_INSERT_HEAD(&qp->idle, w, list);
- assert(w->idle != 0);
+ assert(!isnan(w->used));
UNLOCK(&qp->mtx);
assert(1 == read(w->pipe[0], &c, 1));
- if (w->idle == 0)
+ if (w->wrq == NULL)
break;
wrk_do_one(w);
}
@@ -398,7 +401,7 @@
LOCK(&qp->mtx);
w = TAILQ_LAST(&qp->idle, workerhead);
if (w != NULL &&
- (w->idle + params->wthread_timeout < now ||
+ (w->used + params->wthread_timeout < now ||
VSL_stats->n_wrk > params->wthread_max))
TAILQ_REMOVE(&qp->idle, w, list);
else
@@ -406,7 +409,7 @@
UNLOCK(&qp->mtx);
if (w == NULL)
continue;
- w->idle = 0;
+ AZ(w->wrq);
assert(1 == write(w->pipe[1], w, 1));
}
}