]> err.no Git - varnish/commitdiff
VBE_AddBackend() needs to always return the backend, so make it a pointer arg
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 6 Feb 2008 09:47:24 +0000 (09:47 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Wed, 6 Feb 2008 09:47:24 +0000 (09:47 +0000)
and use the return int to tell if it was a reuse.

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

varnish-cache/bin/varnishd/cache.h
varnish-cache/bin/varnishd/cache_backend.c
varnish-cache/bin/varnishd/cache_backend_random.c
varnish-cache/bin/varnishd/cache_backend_simple.c

index 0a73a81c7202602151b7fe68b4a1a3076a5a48f9..c23693349bf487f711a549c547b799d79f1de801 100644 (file)
@@ -443,7 +443,7 @@ void VBE_free_bereq(struct bereq *bereq);
 extern struct backendlist backendlist;
 void VBE_DropRef(struct backend *);
 void VBE_DropRefLocked(struct backend *);
-struct backend *VBE_AddBackend(struct backend_method *method, const char *ident);
+int VBE_AddBackend(struct backend_method *method, const char *ident, struct backend **be);
 struct vbe_conn *VBE_NewConn(void);
 void VBE_ReleaseConn(struct vbe_conn *);
 void VBE_UpdateHealth(const struct sess *sp, const struct vbe_conn *, int);
index 77eda246b63cac2cd195e3549478a28b2828ceb3..68450b6e35309317e783bec653c3f09aefd6d322 100644 (file)
@@ -326,13 +326,13 @@ VBE_AddBackendMethod(const struct backend_method *bem)
 
 /*--------------------------------------------------------------------
  * Add a backend/director instance when loading a VCL.
- * If an existing backend is matched, grab a refcount and return NULL.
- * Else create a new backend structure and return that with reference
- * initialized to one.
+ * If an existing backend is matched, grab a refcount and return one.
+ * Else create a new backend structure with reference initialized to one
+ * and return zero.
  */
 
-struct backend *
-VBE_AddBackend(struct backend_method *method, const char *ident)
+int
+VBE_AddBackend(struct backend_method *method, const char *ident, struct backend **be)
 {
        struct backend *b;
 
@@ -344,7 +344,8 @@ VBE_AddBackend(struct backend_method *method, const char *ident)
                if (strcmp(b->ident, ident))
                        continue;
                b->refcount++;
-               return (NULL);
+               *be = b;
+               return (1);
        }
 
        b = calloc(sizeof *b, 1);
@@ -361,7 +362,8 @@ VBE_AddBackend(struct backend_method *method, const char *ident)
        b->minute_limit = 1;
 
        VTAILQ_INSERT_TAIL(&backendlist, b, list);
-       return (b);
+       *be = b;
+       return (0);
 }
 
 /*--------------------------------------------------------------------*/
index e3799241586518433b79a34fdf1b13f3ef2a84bb..f1889133233d8530966fb85c950d767bc224a083 100644 (file)
@@ -439,8 +439,16 @@ struct backend_method backend_method_random = {
 void
 VRT_init_random_backend(struct backend **bp, const struct vrt_dir_random *t)
 {
+       struct backend *b;
        (void)bp;
        (void)t;
+
+       if (VBE_AddBackend(&backend_method_random, t->ident, bp))
+               return;         /* reuse existing backend */
+
+       b = *bp;
+       AN(t->name);
+       REPLACE(b->vcl_name, t->name);
 #if 0
        struct backend *b;
        struct ber *ber;
index a9be5def8c05b59bb8283608672a5075a5d4608f..3fcf56bbc8c99d44d04696ed88231d96ee0aaef4 100644 (file)
@@ -49,7 +49,6 @@ struct bes {
 #define BES_MAGIC              0x015e17ac
        char                    *hostname;
        char                    *portname;
-       char                    *ident;
        struct addrinfo         *addr;
        struct addrinfo         *last_addr;
        double                  dnsttl;
@@ -364,10 +363,13 @@ VRT_init_simple_backend(struct backend **bp, const struct vrt_simple_backend *t)
        struct bes *bes;
        const char *p;
        
-       b = VBE_AddBackend(&backend_method_simple, t->ident);
-       if (b == NULL)
+       if (VBE_AddBackend(&backend_method_simple, t->ident, bp))
                return;         /* ref to existing backend */
 
+       b = *bp;
+       AN(t->name);
+       REPLACE(b->vcl_name, t->name);
+
        bes = calloc(sizeof *bes, 1);
        XXXAN(bes);
        bes->magic = BES_MAGIC;
@@ -376,12 +378,6 @@ VRT_init_simple_backend(struct backend **bp, const struct vrt_simple_backend *t)
 
        bes->dnsttl = 300;
 
-       AN(t->ident);
-       REPLACE(bes->ident, t->ident);
-
-       AN(t->name);
-       REPLACE(b->vcl_name, t->name);
-
        AN(t->host->portname);
        REPLACE(bes->portname, t->host->portname);
 
@@ -398,6 +394,4 @@ VRT_init_simple_backend(struct backend **bp, const struct vrt_simple_backend *t)
        if (p != NULL)
                printf("Warning: could not lookup backend %s (%s:%s): %s",
                    b->vcl_name, bes->hostname, bes->portname, p);
-
-       *bp = b;
 }