The flow_report_process_send() function always allocates a frame.
However, when no template_send is needed, template_bi is ~0.
When this happens, no vectors are placed in the frame. When
the frame is then "put", a check for n_vectors == 0 prevents
the frame from actually being placed back on the free list.
Fix that by using a direct call to vlib_frame_free() when
there are no frame vctors.
Type: fix
Signed-off-by: Jon Loeliger <jdl@netgate.com>
Change-Id: I936b5cea4cb3c358247c3d2e1a77d034a322ea76
nf = fr->flow_data_callback (frm, exp, fr, nf, to_next, next_node);
if (nf)
- vlib_put_frame_to_node (vm, next_node, nf);
+ {
+ if (nf->n_vectors)
+ vlib_put_frame_to_node (vm, next_node, nf);
+ else
+ {
+ vlib_node_runtime_t *rt = vlib_node_get_runtime (vm, next_node);
+ vlib_frame_free (vm, rt, nf);
+ }
+ }
}
static uword