stats: store heap in the directory_entry vector 69/35969/2
authorDamjan Marion <damarion@cisco.com>
Fri, 15 Apr 2022 13:27:24 +0000 (15:27 +0200)
committerFlorin Coras <florin.coras@gmail.com>
Fri, 15 Apr 2022 17:53:11 +0000 (17:53 +0000)
Type: improvement
Change-Id: I878803d14d1070ef5a00ed9d3f72022906d55191
Signed-off-by: Damjan Marion <damarion@cisco.com>
src/vlib/stats/init.c
src/vlib/stats/stats.c

index 2a7b6f5..16a47c2 100644 (file)
@@ -45,7 +45,6 @@ vlib_stats_init (vlib_main_t *vm)
   vlib_stats_shared_header_t *shared_header;
   vlib_stats_collector_reg_t reg = {};
 
-  void *oldheap;
   uword memory_size, sys_page_sz;
   int mfd;
   char *mem_name = "stat segment";
@@ -94,16 +93,14 @@ vlib_stats_init (vlib_main_t *vm)
   sm->n_locks = 0;
   clib_spinlock_init (sm->stat_segment_lockp);
 
-  oldheap = clib_mem_set_heap (sm->heap);
-
   /* Set up the name to counter-vector hash table */
-  sm->directory_vector = 0;
+  sm->directory_vector =
+    vec_new_heap (typeof (sm->directory_vector[0]), STAT_COUNTERS, heap);
   sm->dir_vector_first_free_elt = CLIB_U32_MAX;
 
   shared_header->epoch = 1;
 
   /* Scalar stats and node counters */
-  vec_validate (sm->directory_vector, STAT_COUNTERS - 1);
 #define _(E, t, n, p)                                                         \
   strcpy (sm->directory_vector[STAT_COUNTER_##E].name, p "/" #n);             \
   sm->directory_vector[STAT_COUNTER_##E].type = STAT_DIR_TYPE_##t;
@@ -112,8 +109,6 @@ vlib_stats_init (vlib_main_t *vm)
     /* Save the vector in the shared segment, for clients */
     shared_header->directory_vector = sm->directory_vector;
 
-  clib_mem_set_heap (oldheap);
-
   vlib_stats_register_mem_heap (heap);
 
   reg.collect_fn = vector_rate_collector_fn;
index a19909d..61dadd7 100644 (file)
@@ -105,11 +105,8 @@ u32
 vlib_stats_create_counter (vlib_stats_entry_t *e)
 {
   vlib_stats_segment_t *sm = vlib_stats_get_segment ();
-  void *oldheap;
   u32 index;
 
-  oldheap = clib_mem_set_heap (sm->heap);
-
   if (sm->dir_vector_first_free_elt != CLIB_U32_MAX)
     {
       index = sm->dir_vector_first_free_elt;
@@ -123,7 +120,6 @@ vlib_stats_create_counter (vlib_stats_entry_t *e)
 
   sm->directory_vector[index] = *e;
 
-  clib_mem_set_heap (oldheap);
   hash_set_str_key_alloc (&sm->directory_vector_by_name, e->name, index);
 
   return index;
@@ -134,7 +130,6 @@ vlib_stats_remove_entry (u32 entry_index)
 {
   vlib_stats_segment_t *sm = vlib_stats_get_segment ();
   vlib_stats_entry_t *e = vlib_stats_get_entry (sm, entry_index);
-  void *oldheap;
   counter_t **c;
   vlib_counter_t **vc;
   u32 i;
@@ -142,8 +137,6 @@ vlib_stats_remove_entry (u32 entry_index)
   if (entry_index >= vec_len (sm->directory_vector))
     return;
 
-  oldheap = clib_mem_set_heap (sm->heap);
-
   vlib_stats_segment_lock ();
 
   switch (e->type)
@@ -179,7 +172,6 @@ vlib_stats_remove_entry (u32 entry_index)
 
   vlib_stats_segment_unlock ();
 
-  clib_mem_set_heap (oldheap);
   hash_unset_str_key_free (&sm->directory_vector_by_name, e->name);
 
   memset (e, 0, sizeof (*e));