r586 - trunk/varnish-cache/bin/varnishd

phk at projects.linpro.no phk at projects.linpro.no
Tue Aug 1 16:53:30 CEST 2006


Author: phk
Date: 2006-08-01 16:53:29 +0200 (Tue, 01 Aug 2006)
New Revision: 586

Modified:
   trunk/varnish-cache/bin/varnishd/cache_fetch.c
   trunk/varnish-cache/bin/varnishd/storage_file.c
Log:
Add miniobj checks om SMF and STORAGE


Modified: trunk/varnish-cache/bin/varnishd/cache_fetch.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/cache_fetch.c	2006-08-01 12:38:26 UTC (rev 585)
+++ trunk/varnish-cache/bin/varnishd/cache_fetch.c	2006-08-01 14:53:29 UTC (rev 586)
@@ -17,7 +17,6 @@
 #include "shmlog.h"
 #include "libvarnish.h"
 #include "cache.h"
-#include "heritage.h"
 
 /*
  * Chunked encoding is a hack.  We prefer to have a single chunk or a 

Modified: trunk/varnish-cache/bin/varnishd/storage_file.c
===================================================================
--- trunk/varnish-cache/bin/varnishd/storage_file.c	2006-08-01 12:38:26 UTC (rev 585)
+++ trunk/varnish-cache/bin/varnishd/storage_file.c	2006-08-01 14:53:29 UTC (rev 586)
@@ -35,6 +35,8 @@
 /*--------------------------------------------------------------------*/
 
 struct smf {
+	unsigned		magic;
+#define SMF_MAGIC		0x0927a8a0
 	struct storage		s;
 	struct smf_sc		*sc;
 
@@ -284,9 +286,11 @@
 {
 	struct smf *sp, *sp2;
 
-	TAILQ_FOREACH(sp, &sc->free, status)
+	TAILQ_FOREACH(sp, &sc->free, status) {
+		CHECK_OBJ_NOTNULL(sp, SMF_MAGIC);
 		if (sp->size >= bytes)
 			break;
+	}
 	if (sp == NULL)
 		return (sp);
 
@@ -325,6 +329,7 @@
 	struct smf *sp2;
 	struct smf_sc *sc = sp->sc;
 
+	CHECK_OBJ_NOTNULL(sp, SMF_MAGIC);
 	TAILQ_REMOVE(&sc->used, sp, status);
 	sp->alloc = 0;
 
@@ -376,6 +381,7 @@
 	struct smf_sc *sc = sp->sc;
 
 	assert(bytes > 0);
+	CHECK_OBJ_NOTNULL(sp, SMF_MAGIC);
 	sp2 = malloc(sizeof *sp2);
 	assert(sp2 != NULL);
 	VSL_stats->n_smf++;
@@ -401,6 +407,8 @@
 
 	sp = calloc(sizeof *sp, 1);
 	assert(sp != NULL);
+	sp->magic = SMF_MAGIC;
+	sp->s.magic = STORAGE_MAGIC;
 	VSL_stats->n_smf++;
 
 	sp->sc = sc;
@@ -498,6 +506,7 @@
 	size &= ~(sc->pagesize - 1);
 	AZ(pthread_mutex_lock(&sc->mtx));
 	smf = alloc_smf(sc, size);
+	CHECK_OBJ_NOTNULL(smf, SMF_MAGIC);
 	AZ(pthread_mutex_unlock(&sc->mtx));
 	assert(smf != NULL);
 	assert(smf->size == size);
@@ -506,6 +515,7 @@
 	smf->s.ptr = smf->ptr;
 	smf->s.len = 0;
 	smf->s.stevedore = st;
+	CHECK_OBJ_NOTNULL(&smf->s, STORAGE_MAGIC);
 	return (&smf->s);
 }
 
@@ -517,13 +527,14 @@
 	struct smf *smf;
 	struct smf_sc *sc;
 
+	CHECK_OBJ_NOTNULL(s, STORAGE_MAGIC);
 	if (size == 0) {
 		/* XXX: this should not happen */
 		return;
 	}
 	assert(size <= s->space);
 	assert(size > 0);	/* XXX: seen */
-	smf = (struct smf *)(s->priv);
+	CAST_OBJ_NOTNULL(smf, s->priv, SMF_MAGIC);
 	assert(size <= smf->size);
 	sc = smf->sc;
 	size += (sc->pagesize - 1);
@@ -545,7 +556,8 @@
 	struct smf *smf;
 	struct smf_sc *sc;
 
-	smf = (struct smf *)(s->priv);
+	CHECK_OBJ_NOTNULL(s, STORAGE_MAGIC);
+	CAST_OBJ_NOTNULL(smf, s->priv, SMF_MAGIC);
 	sc = smf->sc;
 	AZ(pthread_mutex_lock(&sc->mtx));
 	free_smf(smf);
@@ -562,8 +574,9 @@
 	off_t sent;
 	struct sf_hdtr sfh;
 
-	smf = st->priv;
-
+	CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
+	CAST_OBJ_NOTNULL(smf, st->priv, SMF_MAGIC);
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
 	memset(&sfh, 0, sizeof sfh);
 	sfh.headers = sp->wrk->iov;
 	sfh.hdr_cnt = sp->wrk->niov;
@@ -571,6 +584,12 @@
 	    sp->fd,
 	    smf->offset,
 	    st->len, &sfh, &sent, 0);
+
+	/* Check again after potentially long sleep */
+	CHECK_OBJ_NOTNULL(st, STORAGE_MAGIC);
+	CHECK_OBJ_NOTNULL(smf, SMF_MAGIC);
+	CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
+
 	if (sent == st->len + sp->wrk->liov)
 		return;
 	vca_close_session(sp, "remote closed");




More information about the varnish-commit mailing list