Use template-specific key compare fn when deleting records 90/18990/1
authorDave Barach <dave@barachs.net>
Wed, 17 Apr 2019 21:27:31 +0000 (17:27 -0400)
committerDave Wallace <dwallacelf@gmail.com>
Thu, 18 Apr 2019 00:35:18 +0000 (00:35 +0000)
A simple memcmp won't work when comparing pointer-keys, such as those
used by the bihash_vec8_8.h template.

Change-Id: I77e59f3fd7f7740ef42908ace90ed4843e1c9ac7
Signed-off-by: Dave Barach <dave@barachs.net>
(cherry picked from commit a11bf45b1aba14246cc1259fff1dfb8e9c60581f)

src/vppinfra/bihash_template.c

index 6e910fe..2840342 100644 (file)
@@ -468,7 +468,7 @@ static inline int BV (clib_bihash_add_del_inline)
        */
       for (i = 0; i < limit; i++)
        {
-         if (!memcmp (&(v->kvp[i]), &add_v->key, sizeof (add_v->key)))
+         if (BV (clib_bihash_key_compare) (v->kvp[i].key, add_v->key))
            {
              CLIB_MEMORY_BARRIER ();   /* Add a delay */
              clib_memcpy_fast (&(v->kvp[i]), add_v, sizeof (*add_v));
@@ -519,7 +519,7 @@ static inline int BV (clib_bihash_add_del_inline)
       for (i = 0; i < limit; i++)
        {
          /* Found the key? Kill it... */
-         if (!memcmp (&(v->kvp[i]), &add_v->key, sizeof (add_v->key)))
+         if (BV (clib_bihash_key_compare) (v->kvp[i].key, add_v->key))
            {
              clib_memset (&(v->kvp[i]), 0xff, sizeof (*(add_v)));
              /* Is the bucket empty? */