buffers: fix bug in free list n_alloc tracking 56/9356/3
authorKlement Sekera <ksekera@cisco.com>
Thu, 9 Nov 2017 08:12:12 +0000 (09:12 +0100)
committerDamjan Marion <dmarion.lists@gmail.com>
Thu, 9 Nov 2017 19:26:36 +0000 (19:26 +0000)
This change avoids hitting

ASSERT (vec_len (f->buffers) == f->n_alloc);

in vlib_buffer_delete_free_list_internal by updating
vlib_buffer_free_list_t->n_alloc in case when buffers are removed from
the free list due to overfill.

Change-Id: Id60fa97e8cb0f02ef529b05816265a57a4e7d998
Signed-off-by: Klement Sekera <ksekera@cisco.com>
src/vlib/buffer_funcs.h

index 7224e08..c7b5321 100644 (file)
@@ -828,6 +828,7 @@ vlib_buffer_add_to_free_list (vlib_main_t * vm,
       vec_add_aligned (mf->global_buffers, f->buffers, VLIB_FRAME_SIZE,
                       CLIB_CACHE_LINE_BYTES);
       vec_delete (f->buffers, VLIB_FRAME_SIZE, 0);
+      f->n_alloc -= VLIB_FRAME_SIZE;
       clib_spinlock_unlock (&mf->global_buffers_lock);
     }
 }