void __vlib_refcount_resize(vlib_refcount_per_cpu_t *per_cpu, u32 size)
{
u32 *new_counter = 0, *old_counter;
vec_validate(new_counter, size);
void __vlib_refcount_resize(vlib_refcount_per_cpu_t *per_cpu, u32 size)
{
u32 *new_counter = 0, *old_counter;
vec_validate(new_counter, size);
- memcpy(new_counter, per_cpu->counters, per_cpu->length);
+ vlib_refcount_lock(per_cpu->counter_lock);
+ memcpy(new_counter, per_cpu->counters, vec_len(per_cpu->counters)*4);
vlib_thread_main_t *tm = vlib_get_thread_main ();
u32 thread_index;
for (thread_index = 0; thread_index < tm->n_vlib_mains; thread_index++) {
vlib_thread_main_t *tm = vlib_get_thread_main ();
u32 thread_index;
for (thread_index = 0; thread_index < tm->n_vlib_mains; thread_index++) {
- if (r->per_cpu[thread_index].length > index)
- count += r->per_cpu[thread_index].counters[index];
+ vlib_refcount_lock(r->per_cpu[thread_index].counter_lock);
+ if (index < vec_len(r->per_cpu[thread_index].counters))
+ {
+ count += r->per_cpu[thread_index].counters[index];
+ }
+ vlib_refcount_unlock(r->per_cpu[thread_index].counter_lock);