From 9a219513dc554aafced80abb92d27ac91160e3a6 Mon Sep 17 00:00:00 2001 From: Doug MacEachern Date: Fri, 6 Jul 2018 10:05:03 -0700 Subject: [PATCH] vSphere Cloud Provider: avoid read race during logout The Client nil check was added in 6d1c4a3 , but there was not any go test coverage of that code path until e22f9ca Fixes #65696 --- pkg/cloudprovider/providers/vsphere/vclib/connection.go | 9 ++++++++- pkg/cloudprovider/providers/vsphere/vsphere.go | 5 +---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkg/cloudprovider/providers/vsphere/vclib/connection.go b/pkg/cloudprovider/providers/vsphere/vclib/connection.go index 63d2cdbdff1..379b68df088 100644 --- a/pkg/cloudprovider/providers/vsphere/vclib/connection.go +++ b/pkg/cloudprovider/providers/vsphere/vclib/connection.go @@ -131,7 +131,14 @@ func (connection *VSphereConnection) login(ctx context.Context, client *vim25.Cl // Logout calls SessionManager.Logout for the given connection. func (connection *VSphereConnection) Logout(ctx context.Context) { - m := session.NewManager(connection.Client) + clientLock.Lock() + c := connection.Client + clientLock.Unlock() + if c == nil { + return + } + + m := session.NewManager(c) hasActiveSession, err := m.SessionIsActive(ctx) if err != nil { diff --git a/pkg/cloudprovider/providers/vsphere/vsphere.go b/pkg/cloudprovider/providers/vsphere/vsphere.go index 421b2bd302c..62a9cfb2e88 100644 --- a/pkg/cloudprovider/providers/vsphere/vsphere.go +++ b/pkg/cloudprovider/providers/vsphere/vsphere.go @@ -510,11 +510,8 @@ func buildVSphereFromConfig(cfg VSphereConfig) (*VSphere, error) { func logout(vs *VSphere) { for _, vsphereIns := range vs.vsphereInstanceMap { - if vsphereIns.conn.Client != nil { - vsphereIns.conn.Logout(context.TODO()) - } + vsphereIns.conn.Logout(context.TODO()) } - } // Instances returns an implementation of Instances for vSphere.