X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvlib%2Ferror.c;h=de2020f08cb6791dfc69fe6623d9627f06dbc01f;hb=a6b1a7d809e746325fe712b9de9ff086e55772dd;hp=f01e0b63e9579a867764827410c15abd3d3e0296;hpb=66c858385f3dc1c36682771424a8a9e5a6cd8355;p=vpp.git diff --git a/src/vlib/error.c b/src/vlib/error.c index f01e0b63e95..de2020f08cb 100644 --- a/src/vlib/error.c +++ b/src/vlib/error.c @@ -123,6 +123,23 @@ format_stats_counter_name (u8 *s, va_list *va) return s; } +void +vlib_unregister_errors (vlib_main_t *vm, u32 node_index) +{ + vlib_error_main_t *em = &vm->error_main; + vlib_node_t *n = vlib_get_node (vm, node_index); + vlib_error_desc_t *cd; + + if (n->n_errors > 0) + { + cd = vec_elt_at_index (em->counters_heap, n->error_heap_index); + for (u32 i = 0; i < n->n_errors; i++) + vlib_stats_remove_entry (cd[i].stats_entry_index); + heap_dealloc (em->counters_heap, n->error_heap_handle); + n->n_errors = 0; + } +} + /* Reserves given number of error codes for given node. */ void vlib_register_errors (vlib_main_t *vm, u32 node_index, u32 n_errors, @@ -142,13 +159,7 @@ vlib_register_errors (vlib_main_t *vm, u32 node_index, u32 n_errors, vlib_stats_segment_lock (); /* Free up any previous error strings. */ - if (n->n_errors > 0) - { - cd = vec_elt_at_index (em->counters_heap, n->error_heap_index); - for (u32 i = 0; i < n->n_errors; i++) - vlib_stats_remove_entry (cd[i].stats_entry_index); - heap_dealloc (em->counters_heap, n->error_heap_handle); - } + vlib_unregister_errors (vm, node_index); n->n_errors = n_errors; n->error_counters = counters; @@ -211,6 +222,7 @@ vlib_register_errors (vlib_main_t *vm, u32 node_index, u32 n_errors, for (u32 i = 0; i < n_errors; i++) { t.format = (char *) format (0, "%v %s: %%d", n->name, cd[i].name); + vec_free (vm->error_elog_event_types[n->error_heap_index + i].format); vm->error_elog_event_types[n->error_heap_index + i] = t; nm->node_by_error[n->error_heap_index + i] = n->index; }