]> err.no Git - varnish/commitdiff
Sanitize close/recycle session logic a bit.
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 14 Jun 2006 09:03:45 +0000 (09:03 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 14 Jun 2006 09:03:45 +0000 (09:03 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@182 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_acceptor.c
varnish-cache/bin/varnishd/cache_pipe.c
varnish-cache/bin/varnishd/cache_pool.c

index 4ce785b1f82ef82ed0912c99cbcc1773cdd01859..212bd91e9b3121596f49cc2646e3f31eb19e563e 100644 (file)
@@ -60,8 +60,8 @@ extern struct stevedore *stevedore;
 /* cache_acceptor.c */
 void vca_write(struct sess *sp, void *ptr, size_t len);
 void vca_flush(struct sess *sp);
-void vca_retire_session(struct sess *sp);
-void vca_recycle_session(struct sess *sp);
+void vca_return_session(struct sess *sp);
+void vca_close_session(struct sess *sp);
 void VCA_Init(void);
 
 /* cache_backend.c */
index 8eff05426e9880ce098bf57a26a48f2161f79352..0e8988e0caff0e3d26fc307d362f9d633e3c95ce 100644 (file)
@@ -66,8 +66,7 @@ vca_flush(struct sess *sp)
        if (i != sp->mem->liov) {
                VSL(SLT_SessionClose, sp->fd, "Premature %d of %d",
                    i,  sp->mem->liov);
-               close(sp->fd);
-               sp->fd = -1;
+               vca_close_session(sp);
        }
        sp->mem->liov = 0;
        sp->mem->niov = 0;
@@ -178,24 +177,31 @@ vca_main(void *arg)
        return ("FOOBAR");
 }
 
+/*--------------------------------------------------------------------*/
+
 void
-vca_recycle_session(struct sess *sp)
+vca_close_session(struct sess *sp)
 {
-       VSL(SLT_SessionReuse, sp->fd, "%s", sp->addr);
-       write(pipes[1], &sp, sizeof sp);
+
+       VSL(SLT_SessionClose, sp->fd, "%s", sp->addr);
+       close(sp->fd);
+       sp->fd = -1;
 }
 
+/*--------------------------------------------------------------------*/
+
 void
-vca_retire_session(struct sess *sp)
+vca_return_session(struct sess *sp)
 {
 
-       if (sp->http != NULL)
-               http_Delete(sp->http);
        if (sp->fd >= 0) {
-               VSL(SLT_SessionClose, sp->fd, "%s", sp->addr);
-               close(sp->fd);
+               VSL(SLT_SessionReuse, sp->fd, "%s", sp->addr);
+               write(pipes[1], &sp, sizeof sp);
+       } else {
+               if (sp->http != NULL)
+                       http_Delete(sp->http);
+               free(sp);
        }
-       free(sp);
 }
 
 /*--------------------------------------------------------------------*/
index 9f02ce92ce40ef418dc1f263b8b241cc31303a9b..1bdd35216e98597ae15bf48b5b8b3f312ed2ecad 100644 (file)
@@ -75,7 +75,6 @@ PipeSession(struct worker *w, struct sess *sp)
        event_add(&e2.ev, NULL);
        event_base_loop(w->eb, 0);
        close (fd);
-       close (sp->fd);
+       vca_close_session(sp);
        VBE_ClosedFd(fd_token);
-       sp->fd = -1;
 }
index 8fafd6bcf6bce3cd9a99fd8395e113af778da91d..8bceb0933d0fc6beda12541cf0198e8696092c8f 100644 (file)
@@ -159,17 +159,13 @@ CacheWorker(void *priv)
                if (http_GetHdr(sp->http, "Connection", &b) &&
                    !strcmp(b, "close")) {
                        VSL(SLT_SessionClose, sp->fd, "hdr");
-                       close(sp->fd);
-                       sp->fd = -1;
+                       vca_close_session(sp);
                }
 
                AZ(pthread_mutex_lock(&sessmtx));
                RelVCL(sp->vcl);
                sp->vcl = NULL;
-               if (sp->fd < 0) 
-                       vca_retire_session(sp);
-               else
-                       vca_recycle_session(sp);
+               vca_return_session(sp);
        }
 }
 
@@ -179,7 +175,8 @@ DealWithSession(void *arg, int good)
        struct sess *sp = arg;
 
        if (!good) {
-               vca_retire_session(sp);
+               vca_close_session(sp);
+               vca_return_session(sp);
                return;
        }
        AZ(pthread_mutex_lock(&sessmtx));