[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