@@ -3,11 +3,11 @@ package firecracker
3
3
import (
4
4
"bufio"
5
5
"context"
6
+ "fmt"
6
7
"io/ioutil"
7
8
"os"
8
9
"path/filepath"
9
10
"strings"
10
- "sync"
11
11
"testing"
12
12
13
13
"github.com/sirupsen/logrus"
@@ -106,25 +106,34 @@ func benchmarkForwardSignals(b *testing.B, forwardSignals []os.Signal) {
106
106
b .Logf ("%s: %d" , b .Name (), b .N )
107
107
108
108
for i := 0 ; i < b .N ; i ++ {
109
- var wg sync. WaitGroup
109
+ errCh := make ( chan error , numberOfVMs )
110
110
for j := 0 ; j < numberOfVMs ; j ++ {
111
- wg .Add (1 )
112
111
go func () {
113
- defer wg .Done ()
112
+ var err error
113
+ defer func () { errCh <- err }()
114
114
115
115
machine , cleanup , err := createMachine (ctx , b .Name (), forwardSignals )
116
116
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
118
119
}
119
120
defer cleanup ()
120
121
121
122
err = startAndWaitVM (ctx , machine )
122
123
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
124
126
}
127
+ return // anonymous defer func() will deliver this nil error
125
128
}()
126
129
}
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 )
128
137
}
129
138
}
130
139
func BenchmarkForwardSignalsDefault (t * testing.B ) {
0 commit comments