pg: fix the buffer leak when pa steams are deleted 45/41645/2
authorMohsin Kazmi <[email protected]>
Mon, 21 Oct 2024 16:54:27 +0000 (16:54 +0000)
committerBeno�t Ganne <[email protected]>
Tue, 22 Oct 2024 14:22:08 +0000 (14:22 +0000)
Type: fix

vpp# sh buffers
Pool Name            Index NUMA  Size  Data Size  Total  Avail  Cached   Used
default-numa-0         0     0   2304     2048   128270 125968   1108    1194
default-numa-1         1     1   2304     2048   128270 128270     0       0
vpp# sh pa
Name               Enabled        Count     Parameters
pg0-test-0           No         60900431    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 0,
pg1-test-0           No         60900385    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 0,
pg0-test-1           No         60898008    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 1,
pg1-test-1           No         60897934    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 1,
pg0-test-2           No         60900278    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 2,
pg1-test-2           No         60900184    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 2,
pg0-test-3           No         60900431    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 3,
pg1-test-3           No         60900387    limit -1, rate 1.00e6 pps, size 64-64, buffer-size 2048, worker 3
vpp# pa delete pg0-test-0
vpp# pa delete pg0-test-1
vpp# pa delete pg0-test-2
vpp# pa delete pg0-test-3
vpp# pa delete pg1-test-0
vpp# pa delete pg1-test-1
vpp# pa delete pg1-test-2
vpp# pa delete pg1-test-3
vpp# sh buffer trace verbose
Pool Name            Index NUMA  Size  Data Size  Total  Avail  Cached   Used
default-numa-0         0     0   2304     2048   128270 126650   1620      0
default-numa-1         1     1   2304     2048   128270 128270     0       0

                          Node           Allocated               Freed                  In                 Out            Buffered
            unix-cli-process-0                   0                1194                   0                   0               -1194

Signed-off-by: Mohsin Kazmi <[email protected]>
Change-Id: I03051a8f529df7801cf08f8374a994dbc00fc972

src/vnet/pg/pg.h
src/vnet/pg/stream.c

index 0e4b286..5e99d9a 100644 (file)
@@ -184,7 +184,11 @@ typedef struct pg_stream_t
 always_inline void
 pg_buffer_index_free (pg_buffer_index_t * bi)
 {
+  vlib_main_t *vm = vlib_get_main ();
+  word n_alloc;
   vec_free (bi->edits);
+  n_alloc = clib_fifo_elts (bi->buffer_fifo);
+  vlib_buffer_free (vm, bi->buffer_fifo, n_alloc);
   clib_fifo_free (bi->buffer_fifo);
 }
 
index 6376e9b..440e285 100644 (file)
@@ -615,18 +615,12 @@ void
 pg_stream_del (pg_main_t * pg, uword index)
 {
   pg_stream_t *s;
-  pg_buffer_index_t *bi;
 
   s = pool_elt_at_index (pg->streams, index);
 
   pg_stream_enable_disable (pg, s, /* want_enabled */ 0);
   hash_unset_mem (pg->stream_index_by_name, s->name);
 
-  vec_foreach (bi, s->buffer_indices)
-  {
-    clib_fifo_free (bi->buffer_fifo);
-  }
-
   pg_stream_free (s);
   pool_put (pg->streams, s);
 }