Skip to content

Commit 950d038

Browse files
authored
Merge pull request firecracker-microvm#259 from alrs/alrs-benchmark-test-goroutine
Fix Benchmark Goroutine
2 parents 18718f1 + 0b8bb55 commit 950d038

File tree

1 file changed

+16
-7
lines changed

1 file changed

+16
-7
lines changed

benchmark_test.go

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ package firecracker
33
import (
44
"bufio"
55
"context"
6+
"fmt"
67
"io/ioutil"
78
"os"
89
"path/filepath"
910
"strings"
10-
"sync"
1111
"testing"
1212

1313
"github.com/sirupsen/logrus"
@@ -106,25 +106,34 @@ func benchmarkForwardSignals(b *testing.B, forwardSignals []os.Signal) {
106106
b.Logf("%s: %d", b.Name(), b.N)
107107

108108
for i := 0; i < b.N; i++ {
109-
var wg sync.WaitGroup
109+
errCh := make(chan error, numberOfVMs)
110110
for j := 0; j < numberOfVMs; j++ {
111-
wg.Add(1)
112111
go func() {
113-
defer wg.Done()
112+
var err error
113+
defer func() { errCh <- err }()
114114

115115
machine, cleanup, err := createMachine(ctx, b.Name(), forwardSignals)
116116
if err != nil {
117-
b.Fatalf("failed to create a VM: %s", err)
117+
err = fmt.Errorf("failed to create a VM: %v", err)
118+
return // anonymous defer func() will deliver the error
118119
}
119120
defer cleanup()
120121

121122
err = startAndWaitVM(ctx, machine)
122123
if err != nil && !strings.Contains(err.Error(), "signal: terminated") {
123-
b.Fatalf("failed to start the VM: %s", err)
124+
err = fmt.Errorf("failed to start the VM: %v", err)
125+
return // anonymous defer func() will deliver the error
124126
}
127+
return // anonymous defer func() will deliver this nil error
125128
}()
126129
}
127-
wg.Wait()
130+
for k := 0; k < numberOfVMs; k++ {
131+
err := <-errCh
132+
if err != nil {
133+
b.Fatal(err)
134+
}
135+
}
136+
close(errCh)
128137
}
129138
}
130139
func BenchmarkForwardSignalsDefault(t *testing.B) {

0 commit comments

Comments
 (0)