r1376 - trunk/varnish-cache/bin/varnishd

des at projects.linpro.no des at projects.linpro.no
Wed May 2 16:37:42 CEST 2007


Author: des
Date: 2007-05-02 16:37:42 +0200 (Wed, 02 May 2007)
New Revision: 1376

Modified:
   trunk/varnish-cache/bin/varnishd/cache_hash.c
Log:
Don't try to lock the objhead mutex if we don't have an objhead.  Doing so
caused the Varnish child to die immediately after sending its 503 response
if the backend didn't respond.

Reviewed by:	phk


Modified: trunk/varnish-cache/bin/varnishd/cache_hash.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_hash.c	2007-05-02 13:56:24 UTC (rev 1375)
+++ trunk/varnish-cache/bin/varnishd/cache_hash.c	2007-05-02 14:37:42 UTC (rev 1376)
@@ -185,6 +185,7 @@
 void
 HSH_Unbusy(struct object *o)
 {
+	struct objhead *oh;
 	struct sess *sp;
 
 	CHECK_OBJ_NOTNULL(o, OBJECT_MAGIC);
@@ -192,9 +193,14 @@
 	assert(o->refcnt > 0);
 	if (o->cacheable)
 		EXP_Insert(o);
-	LOCK(&o->objhead->mtx);
+	oh = o->objhead;
+	if (oh != NULL) {
+		CHECK_OBJ(oh, OBJHEAD_MAGIC);
+		LOCK(&oh->mtx);
+	}
 	o->busy = 0;
-	UNLOCK(&o->objhead->mtx);
+	if (oh != NULL)
+		UNLOCK(&oh->mtx);
 	while (1) {
 		sp = TAILQ_FIRST(&o->waitinglist);
 		if (sp == NULL)




More information about the varnish-commit mailing list