]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-10167: Fixed a bug with ks_hash related to keying with INT/INT64/PTR modes, testha...
authorShane Bryldt <astaelan@gmail.com>
Thu, 23 Mar 2017 20:36:46 +0000 (14:36 -0600)
committerShane Bryldt <astaelan@gmail.com>
Thu, 23 Mar 2017 20:36:46 +0000 (14:36 -0600)
libs/libks/src/include/ks_platform.h
libs/libks/src/ks_hash.c
libs/libks/test/testhash.c

index 0b6a04c1af65fbc62ab0eab256195dbcd43058d8..1be538f8e4983faa503d1e4b6f46b1f139b243e9 100644 (file)
@@ -52,6 +52,8 @@ KS_BEGIN_EXTERN_C
 #define _GNU_SOURCE
 #endif
 
+#include <stdint.h>
+
 #if UINTPTR_MAX == 0xffffffffffffffff
 #define KS_64BIT 1
 #endif
index 961c154cda379cbfd848ce04b29c00734aeccb8b..a4d9dbf0395ce9f06baf52b5236977c5a1458cc7 100644 (file)
@@ -76,10 +76,19 @@ hash(ks_hash_t *h, void *k)
 {
     unsigned int i;
 
-       if (h->mode == KS_HASH_MODE_ARBITRARY) {
+       switch (h->mode)
+       {
+       case KS_HASH_MODE_ARBITRARY:
                i = ks_hash_default_arbitrary(k, h->keysize, 13);
-       } else {
+               break;
+       case KS_HASH_MODE_INT:
+       case KS_HASH_MODE_INT64:
+       case KS_HASH_MODE_PTR:
+               i = h->hashfn((void *)&k);
+               break;
+       default:
                i = h->hashfn(k);
+               break;
        }
 
                /* Aim to protect against poor hash functions by adding logic here
@@ -332,11 +341,17 @@ ks_hash_count(ks_hash_t *h)
 
 static int key_equals(ks_hash_t *h, void *k1, void *k2) 
 {
-       if (h->mode == KS_HASH_MODE_ARBITRARY) {
+       switch (h->mode)
+       {
+       case KS_HASH_MODE_ARBITRARY:
                return !memcmp(k1, k2, h->keysize);
-       } else {
-               return h->eqfn(k1, k2);
+       case KS_HASH_MODE_INT:
+       case KS_HASH_MODE_INT64:
+       case KS_HASH_MODE_PTR:
+               return h->eqfn(&k1, &k2);
+       default: break;
        }
+       return h->eqfn(k1, k2);
 }
 
 static void * _ks_hash_remove(ks_hash_t *h, void *k, unsigned int hashvalue, unsigned int index) {
@@ -384,7 +399,7 @@ ks_hash_insert_ex(ks_hash_t *h, void *k, void *v, ks_hash_flag_t flags, ks_hash_
 {
     struct entry *e;
        unsigned int hashvalue = hash(h, k);
-    unsigned index = indexFor(h->tablelength, hashvalue);
+    unsigned int index = indexFor(h->tablelength, hashvalue);
 
        ks_hash_write_lock(h);
 
index 65670cba1e441158443d142d981a0e9fc821dd84..fed4c7f8012a3cad37d4172ccec4c833ed6183d9 100644 (file)
@@ -68,7 +68,7 @@ static void *test2_thread(ks_thread_t *thread, void *data)
 int test2(void)
 {
        ks_thread_t *threads[MAX];
-       int ttl = 1;
+       int ttl = 5;
        int runs = 5;
        ks_pool_t *pool;
        ks_hash_t *hash;