[experimental-ims] 7fc7fa7 Move the "schedule a session" code from cache_pool to cache_session where it rightfully belongs.

Geoff Simmons geoff at varnish-cache.org
Tue Jan 24 18:30:28 CET 2012


commit 7fc7fa7d430bb715713db16ca98b8105958bccad
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date:   Mon Jan 23 10:37:18 2012 +0000

    Move the "schedule a session" code from cache_pool to cache_session
    where it rightfully belongs.

diff --git a/bin/varnishd/cache/cache.h b/bin/varnishd/cache/cache.h
index 5843fa4..2f48427 100644
--- a/bin/varnishd/cache/cache.h
+++ b/bin/varnishd/cache/cache.h
@@ -942,6 +942,8 @@ int SES_Schedule(struct sess *sp);
 void SES_Handle(struct sess *sp, double now);
 void SES_GetReq(struct sess *sp);
 void SES_ReleaseReq(struct sess *sp);
+pool_func_t SES_pool_task;
+
 
 /* cache_shmlog.c */
 extern struct VSC_C_main *VSC_C_main;
diff --git a/bin/varnishd/cache/cache_pool.c b/bin/varnishd/cache/cache_pool.c
index 8b247fa..a8a2b2a 100644
--- a/bin/varnishd/cache/cache_pool.c
+++ b/bin/varnishd/cache/cache_pool.c
@@ -186,6 +186,8 @@ Pool_Task(struct pool *pp, struct pool_task *task, enum pool_how how)
 	int retval = 0;
 
 	CHECK_OBJ_NOTNULL(pp, POOL_MAGIC);
+	AN(task);
+	AN(task->func);
 
 	Lck_Lock(&pp->mtx);
 
@@ -257,6 +259,7 @@ Pool_Work_Thread(void *priv, struct worker *wrk)
 
 		if (tp != NULL) {
 			Lck_Unlock(&pp->mtx);
+			AN(tp->func);
 			tp->func(pp, wrk, tp->priv);
 			stats_clean = WRK_TrySumStat(wrk);
 			Lck_Lock(&pp->mtx);
@@ -316,27 +319,8 @@ Pool_Work_Thread(void *priv, struct worker *wrk)
 		}
 
 		if (wrk->do_what == pool_do_sess) {
-			CHECK_OBJ_NOTNULL(wrk->sp, SESS_MAGIC);
-			AZ(wrk->ws->r);
-
 			stats_clean = 0;
-			wrk->lastused = NAN;
-
-			AZ(wrk->sp->wrk);
-			THR_SetSession(wrk->sp);
-			wrk->sp->wrk = wrk;
-			CNT_Session(wrk->sp);
-			THR_SetSession(NULL);
-			wrk->sp = NULL;
-
-			WS_Assert(wrk->ws);
-			AZ(wrk->busyobj);
-			AZ(wrk->wrw.wfd);
-			assert(wrk->wlp == wrk->wlb);
-			if (cache_param->diag_bitmap & 0x00040000) {
-				if (wrk->vcl != NULL)
-					VCL_Rel(&wrk->vcl);
-			}
+			SES_pool_task(pp, wrk, wrk->sp);
 		} else if (wrk->do_what == pool_do_nothing) {
 			/* we already did */
 		} else {
diff --git a/bin/varnishd/cache/cache_session.c b/bin/varnishd/cache/cache_session.c
index d1dbaba..ba5f005 100644
--- a/bin/varnishd/cache/cache_session.c
+++ b/bin/varnishd/cache/cache_session.c
@@ -127,6 +127,42 @@ SES_Alloc(void)
 	return (sp);
 }
 
+
+/*--------------------------------------------------------------------
+ * The pool-task function for sessions
+ */
+
+void
+SES_pool_task(struct pool *pp, struct worker *wrk, void *arg)
+{
+	struct sess *sp;
+
+	AN(pp);
+	CHECK_OBJ_NOTNULL(wrk, WORKER_MAGIC);
+	CAST_OBJ_NOTNULL(sp, arg, SESS_MAGIC);
+
+	AZ(wrk->ws->r);
+	wrk->lastused = NAN;
+	THR_SetSession(sp);
+	// AZ(wrk->sp);
+	// wrk->sp = sp;
+	AZ(sp->wrk);
+	sp->wrk = wrk;
+	CNT_Session(sp);
+	sp = NULL;
+	/* Cannot access sp now */
+	THR_SetSession(NULL);
+	wrk->sp = NULL;
+	WS_Assert(wrk->ws);
+	AZ(wrk->busyobj);
+	AZ(wrk->wrw.wfd);
+	assert(wrk->wlp == wrk->wlb);
+	if (cache_param->diag_bitmap & 0x00040000) {
+		if (wrk->vcl != NULL)
+			VCL_Rel(&wrk->vcl);
+	}
+}
+
 /*--------------------------------------------------------------------
  * Schedule a session back on a work-thread from its pool
  */



More information about the varnish-commit mailing list