* limitations under the License.
*/
-#include <lb/refcount.h>
+#include <vnet/util/refcount.h>
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);
old_counter = per_cpu->counters;
per_cpu->counters = new_counter;
+ vlib_refcount_unlock(per_cpu->counter_lock);
CLIB_MEMORY_BARRIER();
- per_cpu->length = vec_len(new_counter);
vec_free(old_counter);
}
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);
}
return count;
}