Fix mac_age process crash in multi-threaded environment 88/6988/2
authorSteve Shin <jonshin@cisco.com>
Fri, 2 Jun 2017 17:09:02 +0000 (10:09 -0700)
committerSteve Shin <jonshin@cisco.com>
Fri, 2 Jun 2017 22:17:32 +0000 (15:17 -0700)
VPP crash is observed when MAC aging is enabled with multi-threaded mode.
If a thread other-than-zero expands the working_copies vector,
working_copy_lengths should be initialized with vec_validate_init_empty(..., -1)
to fill -1 across lower-numbered working_copy_lengths vector element.

Change-Id: I60959fc6511306b33acae323df9c6898fc6c50ce
Signed-off-by: Steve Shin <jonshin@cisco.com>
src/vppinfra/bihash_template.c

index 7e4216b..7117f99 100644 (file)
@@ -100,8 +100,7 @@ BV (make_working_copy) (BVT (clib_bihash) * h, clib_bihash_bucket_t * b)
     {
       oldheap = clib_mem_set_heap (h->mheap);
       vec_validate (h->working_copies, thread_index);
-      vec_validate (h->working_copy_lengths, thread_index);
-      h->working_copy_lengths[thread_index] = -1;
+      vec_validate_init_empty (h->working_copy_lengths, thread_index, ~0);
       clib_mem_set_heap (oldheap);
     }