File tree Expand file tree Collapse file tree 2 files changed +13
-3
lines changed
Expand file tree Collapse file tree 2 files changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -257,6 +257,7 @@ type Generator struct {
257257 dataCancel context.CancelFunc
258258 gun Gun
259259 vu VirtualUser
260+ vusMu * sync.Mutex
260261 vus []VirtualUser
261262 ResponsesChan chan * Response
262263 Responses * Responses
@@ -320,6 +321,7 @@ func NewGenerator(cfg *Config) (*Generator, error) {
320321 dataCancel : dataCancel ,
321322 gun : cfg .Gun ,
322323 vu : cfg .VU ,
324+ vusMu : & sync.Mutex {},
323325 Responses : NewResponses (rch ),
324326 ResponsesChan : rch ,
325327 labels : ls ,
@@ -379,7 +381,9 @@ func (g *Generator) runExecuteLoop() {
379381 for i := 0 ; i < int (vus ); i ++ {
380382 inst := g .vu .Clone (g )
381383 g .runVU (inst )
384+ g .vusMu .Lock ()
382385 g .vus = append (g .vus , inst )
386+ g .vusMu .Unlock ()
383387 }
384388 }
385389}
@@ -510,14 +514,18 @@ func (g *Generator) processSegment() bool {
510514 }
511515 if oldVUs > g .currentSegment .From {
512516 for i := 0 ; i < vusToSpawn ; i ++ {
517+ g .vusMu .Lock ()
513518 g .vus [i ].Stop (g )
519+ g .vusMu .Unlock ()
514520 }
515521 g .vus = g .vus [vusToSpawn :]
516522 } else {
517523 for i := 0 ; i < vusToSpawn ; i ++ {
518524 inst := g .vu .Clone (g )
519525 g .runVU (inst )
526+ g .vusMu .Lock ()
520527 g .vus = append (g .vus , inst )
528+ g .vusMu .Unlock ()
521529 }
522530 }
523531 }
@@ -624,8 +632,10 @@ func (g *Generator) pacedCall() {
624632 if ! g .Stats ().RunStarted .Load () {
625633 return
626634 }
627- l := * g .rl .Load ()
628- l .Take ()
635+ if g .rl .Load () == nil {
636+ return
637+ }
638+ (* g .rl .Load ()).Take ()
629639 if g .stats .RunPaused .Load () {
630640 return
631641 }
Original file line number Diff line number Diff line change @@ -475,7 +475,7 @@ func TestSmokeCustomUnitPrecision(t *testing.T) {
475475 _ , failed := gen .Run (true )
476476 require .Equal (t , false , failed )
477477 stats := gen .Stats ()
478- require .GreaterOrEqual (t , stats .Success .Load (), int64 (4970 ))
478+ require .GreaterOrEqual (t , stats .Success .Load (), int64 (4950 ))
479479 require .LessOrEqual (t , stats .Success .Load (), int64 (5010 ))
480480 require .Equal (t , stats .Failed .Load (), int64 (0 ))
481481 require .Equal (t , stats .CallTimeout .Load (), int64 (0 ))
You can’t perform that action at this time.
0 commit comments