Skip to content

Commit 4532c23

Browse files
authored
Merge pull request #201 from thepwagner/stopvmm-guard-stopped
stopVMM: don't signal if stopped
2 parents f8acfc4 + 13ea4f4 commit 4532c23

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

machine.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"os/signal"
2424
"path/filepath"
2525
"strconv"
26+
"strings"
2627
"sync"
2728
"syscall"
2829
"time"
@@ -578,7 +579,11 @@ func (m *Machine) StopVMM() error {
578579
func (m *Machine) stopVMM() error {
579580
if m.cmd != nil && m.cmd.Process != nil {
580581
m.logger.Debug("stopVMM(): sending sigterm to firecracker")
581-
return m.cmd.Process.Signal(syscall.SIGTERM)
582+
err := m.cmd.Process.Signal(syscall.SIGTERM)
583+
if err != nil && !strings.Contains(err.Error(), "os: process already finished") {
584+
return err
585+
}
586+
return nil
582587
}
583588
m.logger.Debug("stopVMM(): no firecracker process running, not sending a signal")
584589

machine_test.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1139,6 +1139,7 @@ func TestWait(t *testing.T) {
11391139
m.StopVMM()
11401140
time.Sleep(1 * time.Second)
11411141
cancel()
1142+
time.Sleep(1 * time.Second)
11421143
},
11431144
},
11441145
}
@@ -1151,13 +1152,18 @@ func TestWait(t *testing.T) {
11511152
socketPath := filepath.Join(testDataPath, fsSafeTestName.Replace(t.Name()))
11521153
defer os.Remove(socketPath)
11531154

1155+
// Tee logs for validation:
1156+
var logBuffer bytes.Buffer
1157+
machineLogger := logrus.New()
1158+
machineLogger.Out = io.MultiWriter(os.Stderr, &logBuffer)
1159+
11541160
cfg := createValidConfig(t, socketPath)
11551161
m, err := NewMachine(ctx, cfg, func(m *Machine) {
11561162
// Rewriting m.cmd partially wouldn't work since Cmd has
11571163
// some unexported members
11581164
args := m.cmd.Args[1:]
11591165
m.cmd = exec.Command(getFirecrackerBinaryPath(), args...)
1160-
})
1166+
}, WithLogger(logrus.NewEntry(machineLogger)))
11611167
require.NoError(t, err)
11621168

11631169
err = m.Start(vmContext)
@@ -1186,6 +1192,10 @@ func TestWait(t *testing.T) {
11861192
require.Equal(t, "os: process already finished", err.Error())
11871193

11881194
wg.Wait()
1195+
1196+
machineLogs := logBuffer.String()
1197+
assert.NotContains(t, machineLogs, "level=error")
1198+
assert.NotContains(t, machineLogs, "process already finished")
11891199
})
11901200
}
11911201
}

0 commit comments

Comments
 (0)