]> err.no Git - varnish/commitdiff
Isolate some hash-string building nastyness in cache_hash.c
authorphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 25 Nov 2008 10:20:16 +0000 (10:20 +0000)
committerphk <phk@d4fa192b-c00b-0410-8231-f00ffab90ce4>
Tue, 25 Nov 2008 10:20:16 +0000 (10:20 +0000)
git-svn-id: svn+ssh://projects.linpro.no/svn/varnish/trunk@3434 d4fa192b-c00b-0410-8231-f00ffab90ce4

varnish-cache/bin/varnishd/cache_center.c
varnish-cache/bin/varnishd/cache_hash.c
varnish-cache/bin/varnishd/cache_vrt.c
varnish-cache/bin/varnishd/hash_slinger.h

index ffcdc6f0718deac7c44c52c8e7b3e8b3421153fa..f99954964f261ff00c08d4bc59bc9ac1242bfbca 100644 (file)
@@ -586,28 +586,12 @@ static int
 cnt_lookup(struct sess *sp)
 {
        struct object *o;
-       char *p;
-       uintptr_t u;
 
        CHECK_OBJ_NOTNULL(sp, SESS_MAGIC);
        CHECK_OBJ_NOTNULL(sp->vcl, VCL_CONF_MAGIC);
 
        if (sp->obj == NULL) {
-
-               /* Allocate the pointers we need, align properly. */
-               sp->lhashptr = 1;       /* space for NUL */
-               sp->ihashptr = 0;
-               sp->nhashptr = sp->vcl->nhashcount * 2;
-               p = WS_Alloc(sp->http->ws,
-                   sizeof(const char *) * (sp->nhashptr + 1));
-               XXXAN(p);
-               /* Align pointer properly (?) */
-               u = (uintptr_t)p;
-               u &= sizeof(const char *) - 1;
-               if (u)
-                       p += sizeof(const char *) - u;
-               sp->hashptr = (void*)p;
-
+               HSH_Prepare(sp, sp->vcl->nhashcount);
                VCL_hash_method(sp);
                assert(sp->handling == VCL_RET_HASH);
        }
index 8596c61b4bce1082a545798032b9f5a2866d671c..d299bfd7bd074dc0b8e84d553f49061f587a5c16 100644 (file)
@@ -201,6 +201,48 @@ HSH_Copy(const struct sess *sp, struct objhead *oh)
        assert(b <= oh->hash + oh->hashlen);
 }
 
+void
+HSH_Prepare(struct sess *sp, unsigned nhashcount)
+{
+       char *p;
+       unsigned u;
+
+       /* Allocate the pointers we need, align properly. */
+       sp->lhashptr = 1;       /* space for NUL */
+       sp->ihashptr = 0;
+       sp->nhashptr = nhashcount * 2;
+       p = WS_Alloc(sp->http->ws, sizeof(const char *) * (sp->nhashptr + 1));
+       XXXAN(p);
+       /* Align pointer properly (?) */
+       u = (uintptr_t)p;
+       u &= sizeof(const char *) - 1;
+       if (u)
+               p += sizeof(const char *) - u;
+       sp->hashptr = (void*)p;
+}
+
+void
+HSH_AddString(struct sess *sp, const char *str)
+{
+       int l;
+
+       if (str == NULL)
+               str = "";
+       l = strlen(str);
+
+       /*
+       * XXX: handle this by bouncing sp->vcl->nhashcount when it fails
+       * XXX: and dispose of this request either by reallocating the
+       * XXX: hashptr (if possible) or restarting/error the request
+       */
+       xxxassert(sp->ihashptr < sp->nhashptr);
+
+       sp->hashptr[sp->ihashptr] = str;
+       sp->hashptr[sp->ihashptr + 1] = str + l;
+       sp->ihashptr += 2;
+       sp->lhashptr += l + 1;
+}
+
 struct object *
 HSH_Lookup(struct sess *sp)
 {
index 61ba299a3477bec35c3bb21b9fda79e1dd07c914..7bf5b286bd1f35d14799ff1648c75a2715cb97ee 100644 (file)
@@ -585,23 +585,8 @@ VRT_r_server_port(struct sess *sp)
 void
 VRT_l_req_hash(struct sess *sp, const char *str)
 {
-       int l;
 
-       if (str == NULL)
-               str = "";
-       l = strlen(str);
-
-       /*
-        * XXX: handle this by bouncing sp->vcl->nhashcount when it fails
-        * XXX: and dispose of this request either by reallocating the
-        * XXX: hashptr (if possible) or restarting/error the request
-        */
-       xxxassert(sp->ihashptr < sp->nhashptr);
-
-       sp->hashptr[sp->ihashptr] = str;
-       sp->hashptr[sp->ihashptr + 1] = str + l;
-       sp->ihashptr += 2;
-       sp->lhashptr += l + 1;
+       HSH_AddString(sp, str);
 }
 
 /*--------------------------------------------------------------------*/
index 753788b722ec143f89b72ffca3cea21c62046c67..91ff69b68259381678ec30756cfdd368952cee48 100644 (file)
@@ -59,6 +59,8 @@ void HSH_Ref(struct object *o);
 void HSH_Deref(struct object *o);
 double HSH_Grace(double g);
 void HSH_Init(void);
+void HSH_AddString(struct sess *sp, const char *str);
+void HSH_Prepare(struct sess *sp, unsigned hashcount);
 
 
 #ifdef VARNISH_CACHE_CHILD