From 42ea211211b7c0f8a873a2d167f2e33f801b0dc1 Mon Sep 17 00:00:00 2001 From: Ashley Cui Date: Wed, 29 Nov 2023 16:09:12 -0500 Subject: [PATCH] Fix locking error in WSL machine rm -f Fixed a bug where `podman machine rm -f` would cause a deadlock when running with WSL. The deadlock is caused by the Remove() function calling the Stop() function after Remove() locks the VM. Stop() also has a lock call, which fails and deadlocks because Remove() already claimed lock. Fix this by moving the stop call before the lock [NO NEW TESTS NEEDED] Signed-off-by: Ashley Cui --- pkg/machine/wsl/machine.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/machine/wsl/machine.go b/pkg/machine/wsl/machine.go index 4f6daa9e9c..9f7ad76885 100644 --- a/pkg/machine/wsl/machine.go +++ b/pkg/machine/wsl/machine.go @@ -1591,9 +1591,6 @@ func readWinProxyTid(v *MachineVM) (uint32, uint32, string, error) { func (v *MachineVM) Remove(name string, opts machine.RemoveOptions) (string, func() error, error) { var files []string - v.lock.Lock() - defer v.lock.Unlock() - if v.isRunning() { if !opts.Force { return "", nil, &machine.ErrVMRunningCannotDestroyed{Name: v.Name} @@ -1603,6 +1600,9 @@ func (v *MachineVM) Remove(name string, opts machine.RemoveOptions) (string, fun } } + v.lock.Lock() + defer v.lock.Unlock() + // Collect all the files that need to be destroyed if !opts.SaveKeys { files = append(files, v.IdentityPath, v.IdentityPath+".pub")