stats: return empty vector rather than NULL if stat_segment_dump_r() is run on an... 44/37744/2
authorAndrew Yourtchenko <ayourtch@gmail.com>
Fri, 2 Dec 2022 21:22:37 +0000 (21:22 +0000)
committerOle Tr�an <otroan@employees.org>
Mon, 5 Dec 2022 09:50:18 +0000 (09:50 +0000)
The return value in this function is initialized with 0, so if a vector of length 0 is passed
to stat_segment_dump_r, then this return value is never populated, resulting in inability
to distinguish between a successful dump of an empty vector and an error.

Solution: call vec_alloc(). As a side effect might get some trivial speed-up.

Type: fix
Signed-off-by: Andrew Yourtchenko <ayourtch@gmail.com>
Change-Id: I33fefd801df457152e9ec257742305182e91f339

src/vpp-api/client/stat_client.c

index 5bb6e9f..5bee21a 100644 (file)
@@ -411,6 +411,15 @@ stat_segment_dump_r (uint32_t * stats, stat_client_main_t * sm)
   if (stat_segment_access_start (&sa, sm))
     return 0;
 
+  /* preallocate the elements.
+   * This takes care of a special case where
+   * the vec_len(stats) == 0,
+   * such that we return a vector of
+   * length 0, rather than a null pointer
+   * (since null pointer is an error)
+   */
+  vec_alloc (res, vec_len (stats));
+
   for (i = 0; i < vec_len (stats); i++)
     {
       /* Collect counter */