From e24215b47ad5cd6599973c3a76a375b99ad75d44 Mon Sep 17 00:00:00 2001 From: Ondrej Fabry Date: Tue, 16 Apr 2019 15:13:18 +0200 Subject: Fix crash in stats for removed interfaces/nodes Change-Id: I36b4cd2625c7f0c5846fe402be7b2aeece4707f8 Signed-off-by: Ondrej Fabry --- adapter/vppapiclient/stat_client.go | 7 ++++--- core/stats.go | 6 ++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/adapter/vppapiclient/stat_client.go b/adapter/vppapiclient/stat_client.go index a2a9826..55705bd 100644 --- a/adapter/vppapiclient/stat_client.go +++ b/adapter/vppapiclient/stat_client.go @@ -285,10 +285,11 @@ func (c *statClient) DumpStats(patterns ...string) (stats []*adapter.StatEntry, var vector []adapter.Name for k := 0; k < length; k++ { s := C.govpp_stat_segment_data_get_name_vector_index(&v, C.int(k)) - if s == nil { - continue + var name adapter.Name + if s != nil { + name = adapter.Name(C.GoString(s)) } - vector = append(vector, adapter.Name(C.GoString(s))) + vector = append(vector, name) } stat.Data = adapter.NameStat(vector) diff --git a/core/stats.go b/core/stats.go index 4cbd9f2..48b516c 100644 --- a/core/stats.go +++ b/core/stats.go @@ -196,6 +196,9 @@ func (c *StatsConnection) GetNodeStats() (*api.NodeStats, error) { } } for i, v := range perNode { + if len(nodeStats.Nodes) <= i { + break + } nodeCounters := nodeStats.Nodes[i] fn(&nodeCounters, v) nodeStats.Nodes[i] = nodeCounters @@ -257,6 +260,9 @@ func (c *StatsConnection) GetInterfaceStats() (*api.InterfaceStats, error) { } } for i, v := range perIf { + if len(ifStats.Interfaces) <= i { + break + } ifCounters := ifStats.Interfaces[i] fn(&ifCounters, v) ifStats.Interfaces[i] = ifCounters -- cgit 1.2.3-korg