Skip to content

Commit 57dfb92

Browse files
committed
vfkit: More robust Kill()
We know that setting the state to `HardStop` typically fails: I0309 19:19:42.378591 21795 out.go:177] 🔥 Deleting "minikube" in vfkit ... W0309 19:19:42.397472 21795 delete.go:106] remove failed, will retry: kill: Post "http://_/vm/state": EOF This may lead to unnecessary retries and delays. Fix by falling back to sending a SIGKILL signal. Example delete flow when setting vfkit state fails: I0309 20:07:41.688259 25540 out.go:177] 🔥 Deleting "minikube" in vfkit ... I0309 20:07:41.712017 25540 main.go:141] libmachine: Failed to set vfkit state to 'HardStop': Post "http://_/vm/state": EOF
1 parent 6e725a4 commit 57dfb92

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

pkg/drivers/vfkit/vfkit.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -362,7 +362,23 @@ func (d *Driver) extractKernel(isoPath string) error {
362362

363363
func (d *Driver) Kill() error {
364364
if err := d.SetVFKitState("HardStop"); err != nil {
365-
return err
365+
// Typically fails with EOF due to https://github.com/crc-org/vfkit/issues/277.
366+
log.Debugf("Failed to set vfkit state to 'HardStop': %s", err)
367+
pidfile := d.pidfilePath()
368+
pid, err := process.ReadPidfile(pidfile)
369+
if err != nil {
370+
if !errors.Is(err, os.ErrNotExist) {
371+
return err
372+
}
373+
return nil
374+
}
375+
if err := process.Kill(pid, "vfkit"); err != nil {
376+
if err != os.ErrProcessDone {
377+
return err
378+
}
379+
os.Remove(pidfile)
380+
return nil
381+
}
366382
}
367383
return nil
368384
}

0 commit comments

Comments
 (0)