-
Improvement
-
Resolution: Unresolved
-
High
-
None
-
None
-
None
Currently vlib_validate_simple_counter () is a void function.
When it is called to add new counters but no memory in statseg, VPP crashes:
#0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51 #1 0x00007ffff462c8b1 in __GI_abort () at abort.c:79 #2 0x00000000004071d3 in os_panic () at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vpp/vnet/main.c:366 #3 0x00007ffff55c3ae9 in os_out_of_memory () at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vppinfra/unix-misc.c:222 #4 0x00007ffff55c8195 in clib_mem_alloc_aligned_at_offset (size=674007564, align=8, align_offset=8, os_out_of_memory_on_failure=1) at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vppinfra/mem.h:147 #5 0x00007ffff55c7ecd in vec_resize_allocate_memory (v=0x7fff7cc50a40, length_increment=1, data_bytes=449338456, header_bytes=8, data_align=8, numa_id=255) at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vppinfra/vec.c:107 #6 0x00000000004113a0 in _vec_resize_inline (v=0x7fff7cc50a40, length_increment=1, data_bytes=449338448, header_bytes=0, data_align=8, numa_id=255) at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vppinfra/vec.h:170 #7 0x0000000000411097 in vlib_stats_create_counter (e=0x7fffb5f95a70, oldheap=0x7fffb45dc010) at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vpp/stats/stat_segment.c:124 #8 0x00000000004109fd in vlib_stats_pop_heap (cm_arg=0x7fffee70a4c0, oldheap=0x7fffb45dc010, cindex=0, type=STAT_DIR_TYPE_COUNTER_VECTOR_SIMPLE) at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vpp/stats/stat_segment.c:225 #9 0x00007ffff609ed9c in vlib_validate_simple_counter (cm=0x7fffee70a4c0, index=0) at /home/bzhou2/work/titan/vpp/vpp/vpp-repo/src/vlib/counter.c:89
Is it possible to make vlib_validate_simple_counter () return error (instead of letting VPP crash)? That way caller can know it needs to stop adding more counters, but let system keep running without crashing.?