summaryrefslogtreecommitdiffstats
path: root/vlib/vlib/trace_funcs.h
diff options
context:
space:
mode:
Diffstat (limited to 'vlib/vlib/trace_funcs.h')
-rw-r--r--vlib/vlib/trace_funcs.h12
1 files changed, 12 insertions, 0 deletions
diff --git a/vlib/vlib/trace_funcs.h b/vlib/vlib/trace_funcs.h
index 3dc7471e..1da46b41 100644
--- a/vlib/vlib/trace_funcs.h
+++ b/vlib/vlib/trace_funcs.h
@@ -99,6 +99,8 @@ vlib_trace_next_frame (vlib_main_t * vm,
nf->flags |= VLIB_FRAME_TRACE;
}
+void trace_apply_filter (vlib_main_t * vm);
+
/* Mark buffer as traced and allocate trace buffer. */
always_inline void
vlib_trace_buffer (vlib_main_t * vm,
@@ -110,6 +112,16 @@ vlib_trace_buffer (vlib_main_t * vm,
vlib_trace_main_t * tm = &vm->trace_main;
vlib_trace_header_t ** h;
+ /*
+ * Apply filter to existing traces to keep number of allocated traces low.
+ * Performed each time around the main loop.
+ */
+ if (tm->last_main_loop_count != vm->main_loop_count)
+ {
+ tm->last_main_loop_count = vm->main_loop_count;
+ trace_apply_filter (vm);
+ }
+
vlib_trace_next_frame (vm, r, next_index);
pool_get (tm->trace_buffer_pool, h);