r1980 - trunk/varnish-cache/bin/varnishd

phk at projects.linpro.no phk at projects.linpro.no
Sun Sep 23 14:39:28 CEST 2007


Author: phk
Date: 2007-09-23 14:39:27 +0200 (Sun, 23 Sep 2007)
New Revision: 1980

Modified:
   trunk/varnish-cache/bin/varnishd/cache_pool.c
Log:
Polish while reading review.


Modified: trunk/varnish-cache/bin/varnishd/cache_pool.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_pool.c	2007-09-21 13:18:10 UTC (rev 1979)
+++ trunk/varnish-cache/bin/varnishd/cache_pool.c	2007-09-23 12:39:27 UTC (rev 1980)
@@ -183,7 +183,6 @@
 	struct workreq *wrq;
 
 	AN(w->wrq);
-	w->used = NAN;
 	wrq = w->wrq;
 	CHECK_OBJ_NOTNULL(wrq->sess, SESS_MAGIC);
 	wrq->sess->wrk = w;
@@ -191,12 +190,13 @@
 		CHECK_OBJ(w->nobj, OBJECT_MAGIC);
 	if (w->nobjhead != NULL)
 		CHECK_OBJ(w->nobjhead, OBJHEAD_MAGIC);
+	w->used = NAN;
 	CNT_Session(wrq->sess);
+	assert(!isnan(w->used));
 	if (w->nobj != NULL)
 		CHECK_OBJ(w->nobj, OBJECT_MAGIC);
 	if (w->nobjhead != NULL)
 		CHECK_OBJ(w->nobjhead, OBJHEAD_MAGIC);
-	assert(!isnan(w->used));
 	w->wrq = NULL;
 }
 
@@ -220,48 +220,47 @@
 	LOCK(&tmtx);
 	VSL_stats->n_wrk_create++;
 	UNLOCK(&tmtx);
+
 	while (1) {
 		CHECK_OBJ_NOTNULL(w, WORKER_MAGIC);
+		assert(!isnan(w->used));
 
+		LOCK(&tmtx);
+
 		/* Process overflow requests, if any */
 		w->wrq = TAILQ_FIRST(&overflow);
 		if (w->wrq != NULL) {
-			LOCK(&tmtx);
-			w->wrq = TAILQ_FIRST(&overflow);
-			if (w->wrq != NULL) {
-				VSL_stats->n_wrk_queue--;
-				TAILQ_REMOVE(&overflow, w->wrq, list);
-				UNLOCK(&tmtx);
-				wrk_do_one(w);
-				continue;
-			}
-			UNLOCK(&tmtx);
+			VSL_stats->n_wrk_queue--;
+			TAILQ_REMOVE(&overflow, w->wrq, list);
+		} else {
+			TAILQ_INSERT_HEAD(&qp->idle, w, list);
 		}
 
-		LOCK(&qp->mtx);
-		TAILQ_INSERT_HEAD(&qp->idle, w, list);
-		assert(!isnan(w->used));
 		UNLOCK(&qp->mtx);
-		assert(1 == read(w->pipe[0], &c, 1));
+
 		if (w->wrq == NULL)
+			assert(1 == read(w->pipe[0], &c, 1));
+		if (w->wrq == NULL)
 			break;
 		wrk_do_one(w);
 	}
+
 	LOCK(&tmtx);
 	VSL_stats->n_wrk--;
 	qp->nwrk--;
 	UNLOCK(&tmtx);
+
 	VSL(SLT_WorkThread, 0, "%p end", w);
 	if (w->vcl != NULL)
 		VCL_Rel(&w->vcl);
-	close(w->pipe[0]);
-	close(w->pipe[1]);
+	AZ(close(w->pipe[0]));
+	AZ(close(w->pipe[1]));
 	if (w->srcaddr != NULL)
 		free(w->srcaddr);
 	if (w->nobjhead != NULL)
-		free(w->nobjhead);
+		FREE_OBJ(w->nobjhead);
 	if (w->nobj!= NULL)
-		free(w->nobj);
+		FREE_OBJ(w->nobj);
 	return (NULL);
 }
 




More information about the varnish-commit mailing list