From 05aeea12ce5e5b5668d1cc77e2bcd25106a4385f Mon Sep 17 00:00:00 2001 From: Guoliang Wang Date: Fri, 7 Sep 2018 08:43:54 +0800 Subject: [PATCH] fix bug that defer in infinite loop --- .../providers/vsphere/vsphere_util.go | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/pkg/cloudprovider/providers/vsphere/vsphere_util.go b/pkg/cloudprovider/providers/vsphere/vsphere_util.go index 2601032457a..b492b6f1ea9 100644 --- a/pkg/cloudprovider/providers/vsphere/vsphere_util.go +++ b/pkg/cloudprovider/providers/vsphere/vsphere_util.go @@ -19,24 +19,23 @@ package vsphere import ( "context" "errors" + "fmt" + "io/ioutil" "os" + "path/filepath" "regexp" "strings" "time" "github.com/golang/glog" "github.com/vmware/govmomi/vim25" - - "fmt" - "github.com/vmware/govmomi/vim25/mo" - "io/ioutil" + "k8s.io/api/core/v1" k8stypes "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib" "k8s.io/kubernetes/pkg/cloudprovider/providers/vsphere/vclib/diskmanagers" "k8s.io/kubernetes/pkg/util/version" - "path/filepath" ) const ( @@ -298,11 +297,15 @@ func (vs *VSphere) cleanUpDummyVMs(dummyVMPrefix string) { continue } // A write lock is acquired to make sure the cleanUp routine doesn't delete any VM's created by ongoing PVC requests. - defer cleanUpDummyVMLock.Lock() - err = diskmanagers.CleanUpDummyVMs(ctx, vmFolder, dc) - if err != nil { - glog.V(4).Infof("Unable to clean up dummy VM's in the kubernetes cluster: %q. err: %+v", vs.cfg.Workspace.Folder, err) + cleanUpDummyVMs := func() { + cleanUpDummyVMLock.Lock() + defer cleanUpDummyVMLock.Unlock() + err = diskmanagers.CleanUpDummyVMs(ctx, vmFolder, dc) + if err != nil { + glog.V(4).Infof("Unable to clean up dummy VM's in the kubernetes cluster: %q. err: %+v", vs.cfg.Workspace.Folder, err) + } } + cleanUpDummyVMs() } }