stats: check if stats vector entry is empty 45/38545/3
authorOle Troan <ot@cisco.com>
Thu, 23 Mar 2023 21:09:51 +0000 (22:09 +0100)
committerAndrew Yourtchenko <ayourtch@gmail.com>
Mon, 17 Apr 2023 14:04:06 +0000 (14:04 +0000)
When a stats entry is removed it is marked empty.
The stats client did not check for that and returned an empty string.
This resulted in blank lines in vpp_get_stats. Fix by returning null instead
and checking value.

Type: fix
Signed-off-by: Ole Troan <ot@cisco.com>
Change-Id: I08a39ba3ef4421bf275747a6300f97fe36791b50

src/vpp-api/client/stat_client.c
src/vpp/app/vpp_get_stats.c

index 01ed7c7..1c31ea0 100644 (file)
@@ -512,6 +512,11 @@ stat_segment_index_to_name_r (uint32_t index, stat_client_main_t * sm)
     return 0;
   vec = get_stat_vector_r (sm);
   ep = vec_elt_at_index (vec, index);
+  if (ep->type == STAT_DIR_TYPE_EMPTY)
+    {
+      stat_segment_access_end (&sa, sm);
+      return 0;
+    }
   if (!stat_segment_access_end (&sa, sm))
     return 0;
   return strdup (ep->name);
index a37dfca..54d36ab 100644 (file)
@@ -179,6 +179,8 @@ reconnect:
       for (i = 0; i < vec_len (dir); i++)
        {
          char *n = stat_segment_index_to_name (dir[i]);
+         if (!n)
+           continue;
          printf ("%s\n", n);
          free (n);
        }