Commit 7fc7fa7d authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Move the "schedule a session" code from cache_pool to cache_session

where it rightfully belongs.
parent f965f4df
......@@ -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;
......
......@@ -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 {
......
......@@ -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
*/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment