From b3e4b49ddb82a151f28a75215102f33a102945ad Mon Sep 17 00:00:00 2001 From: Menghan Li <menghanl@google.com> Date: Tue, 28 May 2019 11:14:10 -0700 Subject: [PATCH] xds: fix eds balancer nil pointer panic without addresses (#2809) --- balancer/xds/edsbalancer/edsbalancer.go | 4 +++- balancer/xds/edsbalancer/edsbalancer_test.go | 7 +++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/balancer/xds/edsbalancer/edsbalancer.go b/balancer/xds/edsbalancer/edsbalancer.go index 483228fe..80b2f027 100644 --- a/balancer/xds/edsbalancer/edsbalancer.go +++ b/balancer/xds/edsbalancer/edsbalancer.go @@ -277,7 +277,9 @@ func (xdsB *EDSBalancer) UpdateBalancerState(s connectivity.State, p balancer.Pi // Close closes the balancer. func (xdsB *EDSBalancer) Close() { - xdsB.bg.close() + if xdsB.bg != nil { + xdsB.bg.close() + } } type dropPicker struct { diff --git a/balancer/xds/edsbalancer/edsbalancer_test.go b/balancer/xds/edsbalancer/edsbalancer_test.go index b1d7c339..5bdddd1e 100644 --- a/balancer/xds/edsbalancer/edsbalancer_test.go +++ b/balancer/xds/edsbalancer/edsbalancer_test.go @@ -337,6 +337,13 @@ func TestEDS_TwoLocalities(t *testing.T) { } } +func TestClose(t *testing.T) { + edsb := NewXDSBalancer(nil, nil) + // This is what could happen when switching between fallback and eds. This + // make sure it doesn't panic. + edsb.Close() +} + func init() { balancer.Register(&testConstBalancerBuilder{}) }