stats: fix per_worker vector rate heap 87/22387/2
authorOle Troan <[email protected]>
Wed, 18 Sep 2019 11:13:16 +0000 (13:13 +0200)
committerOle Trøan <[email protected]>
Mon, 30 Sep 2019 09:33:03 +0000 (09:33 +0000)
The per_worker counters were outside of the stats heap.
Also fixes the length of the per_vector counter.
A simple vector is two dimensional including a thread dimension.

Fixes: f89a6de8f0
Type: fix
Signed-off-by: Ole Troan <[email protected]>
Change-Id: I370bf9cb033d264f42df2723e01b768dc270792b
(cherry picked from commit a41b0b78a4341478ee6c8701f9ec642b5c2d1cdd)

src/vpp/stats/stat_segment.c

index 5dcb390..0eabc03 100644 (file)
@@ -553,13 +553,17 @@ do_stat_segment_updates (stat_segment_main_t * sm)
    */
   if (PREDICT_FALSE (num_worker_threads_set == 0))
     {
+      void *oldheap = clib_mem_set_heap (sm->heap);
+      vlib_stat_segment_lock ();
+
       sm->directory_vector[STAT_COUNTER_NUM_WORKER_THREADS].value =
        vec_len (vlib_mains) > 1 ? vec_len (vlib_mains) - 1 : 1;
 
       stat_validate_counter_vector (&sm->directory_vector
-                                   [STAT_COUNTER_VECTOR_RATE_PER_WORKER],
-                                   vec_len (vlib_mains));
+                                   [STAT_COUNTER_VECTOR_RATE_PER_WORKER], 0);
       num_worker_threads_set = 1;
+      vlib_stat_segment_unlock ();
+      clib_mem_set_heap (oldheap);
     }
 
   /*
@@ -586,7 +590,7 @@ do_stat_segment_updates (stat_segment_main_t * sm)
       vector_rate += this_vector_rate;
 
       /* Set the per-worker rate */
-      counters[i - start][0] = this_vector_rate;
+      counters[0][i - start] = this_vector_rate;
     }
 
   /* And set the system average rate */