]> err.no Git - varnish/commitdiff
Use the fact that we have the worker thread in struct sess now.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 14 Jul 2006 12:45:56 +0000 (12:45 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Fri, 14 Jul 2006 12:45:56 +0000 (12:45 +0000)
Move initial and final processing into cnt_recv() and cnt_done()

git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@476 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_center.c
varnish-cache/bin/varnishd/cache_pool.c

index 3f9e90b1a03633f96524d118c0746d455286779d..abfb85f967c9223f859696902fbb38c4326b92ed 100644 (file)
@@ -245,7 +245,7 @@ void BAN_NewObj(struct object *o);
 int BAN_CheckObject(struct object *o, const char *url);
 
 /* cache_center.c [CNT] */
-void CNT_Session(struct worker *w, struct sess *sp);
+void CNT_Session(struct sess *sp);
 
 /* cache_expiry.c */
 void EXP_Insert(struct object *o);
index 68e3e46c02bf709cc10e55a846deb78a6e1ac9c2..1f070bef520112fc40987ebea5e77863003e4cc7 100644 (file)
@@ -58,10 +58,10 @@ DOT deliver2 -> DONE [style=bold]
  */
 
 static int
-cnt_deliver(struct worker *w, struct sess *sp)
+cnt_deliver(struct sess *sp)
 {
 
-       vca_write_obj(w, sp);
+       vca_write_obj(sp->wrk, sp);
        sp->step = STP_DONE;
        return (0);
 }
@@ -78,11 +78,10 @@ DOT ]
  */
 
 static int
-cnt_done(struct worker *w, struct sess *sp)
+cnt_done(struct sess *sp)
 {
        char *b;
 
-       (void)w;
        if (http_GetHdr(sp->http, "Connection", &b) &&
            !strcmp(b, "close")) {
                vca_close_session(sp, "Connection header");
@@ -90,6 +89,10 @@ cnt_done(struct worker *w, struct sess *sp)
            strcmp(b, "HTTP/1.1")) {
                vca_close_session(sp, "not HTTP/1.1");
        }
+       VCL_Rel(sp->vcl);
+       sp->vcl = NULL;
+
+       vca_return_session(sp);
        return (1);
 }
 
@@ -107,7 +110,7 @@ DOT }
 DOT error -> DONE
  */
 
-static int cnt_error(struct worker *w, struct sess *sp) { (void)w; (void)sp; INCOMPL(); }
+static int cnt_error(struct sess *sp) { (void)sp; INCOMPL(); }
 
 
 /*--------------------------------------------------------------------
@@ -159,7 +162,7 @@ DOT fetch_error -> ERROR
  */
 
 static int
-cnt_fetch(struct worker *w, struct sess *sp)
+cnt_fetch(struct sess *sp)
 {
 
        RFC2616_cache_policy(sp, sp->bkd_http);
@@ -186,7 +189,7 @@ cnt_fetch(struct worker *w, struct sess *sp)
        }
        if (sp->handling == VCL_RET_INSERT) {
                sp->obj->cacheable = 1;
-               FetchBody(w, sp);
+               FetchBody(sp->wrk, sp);
                sp->step = STP_DELIVER;
                return (0);
        }
@@ -234,7 +237,7 @@ DOT hit2 -> DELIVER [style=bold]
  */
 
 static int
-cnt_hit(struct worker *w, struct sess *sp)
+cnt_hit(struct sess *sp)
 {
 
        VCL_hit_method(sp);
@@ -243,7 +246,7 @@ cnt_hit(struct worker *w, struct sess *sp)
                sp->handling = VCL_RET_PASS;
 
        if (sp->handling == VCL_RET_DELIVER) {
-               vca_write_obj(w, sp);
+               vca_write_obj(sp->wrk, sp);
                HSH_Deref(sp->obj);
                sp->obj = NULL;
                sp->step = STP_DONE;
@@ -252,7 +255,7 @@ cnt_hit(struct worker *w, struct sess *sp)
        if (sp->handling == VCL_RET_PASS) {
                HSH_Deref(sp->obj);
                sp->obj = NULL;
-               PassSession(w, sp);
+               PassSession(sp->wrk, sp);
                sp->step = STP_PASSBODY;
                return (0);
        }
@@ -287,10 +290,10 @@ DOT lookup2 -> MISS [label="miss", style=bold]
  */
 
 static int
-cnt_lookup(struct worker *w, struct sess *sp)
+cnt_lookup(struct sess *sp)
 {
 
-       sp->obj = HSH_Lookup(w, sp->http);
+       sp->obj = HSH_Lookup(sp->wrk, sp->http);
        if (sp->obj->busy) {
                VSL_stats->cache_miss++;
                sp->step = STP_MISS;
@@ -347,7 +350,7 @@ DOT
  */
 
 static int
-cnt_miss(struct worker *w, struct sess *sp)
+cnt_miss(struct sess *sp)
 {
 
        VCL_miss_method(sp);
@@ -358,14 +361,14 @@ cnt_miss(struct worker *w, struct sess *sp)
                HSH_Unbusy(sp->obj);
                HSH_Deref(sp->obj);
                sp->obj = 0;
-               PassSession(w, sp);
+               PassSession(sp->wrk, sp);
                sp->step = STP_PASSBODY;
                return (0);
        }
        if (sp->handling == VCL_RET_LOOKUP)
                INCOMPL();
        if (sp->handling == VCL_RET_FETCH) {
-               FetchHeaders(w, sp);
+               FetchHeaders(sp->wrk, sp);
                sp->step = STP_FETCH;
                return (0);
        }
@@ -388,10 +391,10 @@ DOT pass -> PASSBODY
  */
 
 static int
-cnt_pass(struct worker *w, struct sess *sp)
+cnt_pass(struct sess *sp)
 {
 
-       PassSession(w, sp);
+       PassSession(sp->wrk, sp);
        sp->step = STP_PASSBODY;
        return (0);
 }
@@ -412,9 +415,9 @@ DOT passbody -> DONE
  */
 
 static int
-cnt_passbody(struct worker *w, struct sess *sp)
+cnt_passbody(struct sess *sp)
 {
-       PassBody(w, sp);
+       PassBody(sp->wrk, sp);
        sp->step = STP_DONE;
        return (0);
 }
@@ -435,10 +438,10 @@ DOT pipe -> DONE
  */
 
 static int
-cnt_pipe(struct worker *w, struct sess *sp)
+cnt_pipe(struct sess *sp)
 {
 
-       PipeSession(w, sp);
+       PipeSession(sp->wrk, sp);
        sp->step = STP_DONE;
        return (0);
 }
@@ -471,13 +474,17 @@ DOT recv_error -> ERROR
  */
 
 static int
-cnt_recv(struct worker *w, struct sess *sp)
+cnt_recv(struct sess *sp)
 {
        int done;
 
+       sp->t0 = time(NULL);
+       sp->vcl = VCL_Get();
+       SES_RefSrcAddr(sp);
+
        done = http_DissectRequest(sp->http, sp->fd);
        if (done != 0) {
-               RES_Error(w, sp, done, NULL);
+               RES_Error(sp->wrk, sp, done, NULL);
                sp->step = STP_DONE;
                return (0);
        }
@@ -520,24 +527,17 @@ cnt_recv(struct worker *w, struct sess *sp)
  */
 
 void
-CNT_Session(struct worker *w, struct sess *sp)
+CNT_Session(struct sess *sp)
 {
        int done;
 
-       sp->t0 = time(NULL);
-       sp->vcl = VCL_Get();
-
-       sp->wrk = w;
-
-       SES_RefSrcAddr(sp);
-
        sp->step = STP_RECV;
        for (done = 0; !done; ) {
                switch (sp->step) {
 #define STEP(l,u) \
                case STP_##u: \
                        VSL(SLT_Debug, sp->fd, "State " #u); \
-                       done = cnt_##l(w, sp); \
+                       done = cnt_##l(sp); \
                        break;
 #include "steps.h"
 #undef STEP
@@ -545,10 +545,6 @@ CNT_Session(struct worker *w, struct sess *sp)
                }
        }
 
-       VCL_Rel(sp->vcl);
-       sp->vcl = NULL;
-
-       vca_return_session(sp);
 }
 
 /*
index dda2b3dde9e8efd6fe8cbcde64244d31db7c8252..d776b57786d9294383b94f2c9167cff2d8fd4b89 100644 (file)
@@ -62,7 +62,8 @@ wrk_thread(void *priv)
                        TAILQ_REMOVE(&wrk_reqhead, wrq, list);
                        AZ(pthread_mutex_unlock(&wrk_mtx));
                        assert(wrq->sess != NULL);
-                       CNT_Session(w, wrq->sess);
+                       wrq->sess->wrk = w;
+                       CNT_Session(wrq->sess);
                        AZ(pthread_mutex_lock(&wrk_mtx));
                        VSL_stats->n_wrk_busy--;
                        TAILQ_INSERT_HEAD(&wrk_head, w, list);