mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
testing: allow parallel-subtest goroutines to exit when the subtest is complete
Fixes #45127 Updates #38768 Change-Id: I7f41901d5bcc07741ac9f5f2a24d2b07ef633cb1 Reviewed-on: https://go-review.googlesource.com/c/go/+/303330 Trust: Bryan C. Mills <bcmills@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Ian Lance Taylor <iant@golang.org>
This commit is contained in:
parent
482903150d
commit
1c590661e7
2 changed files with 59 additions and 6 deletions
|
|
@ -1258,7 +1258,7 @@ func (t *T) Run(name string, f func(t *T)) bool {
|
|||
t = &T{
|
||||
common: common{
|
||||
barrier: make(chan bool),
|
||||
signal: make(chan bool),
|
||||
signal: make(chan bool, 1),
|
||||
name: testName,
|
||||
parent: &t.common,
|
||||
level: t.level + 1,
|
||||
|
|
@ -1539,7 +1539,7 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT
|
|||
ctx.deadline = deadline
|
||||
t := &T{
|
||||
common: common{
|
||||
signal: make(chan bool),
|
||||
signal: make(chan bool, 1),
|
||||
barrier: make(chan bool),
|
||||
w: os.Stdout,
|
||||
},
|
||||
|
|
@ -1552,11 +1552,12 @@ func runTests(matchString func(pat, str string) (bool, error), tests []InternalT
|
|||
for _, test := range tests {
|
||||
t.Run(test.Name, test.F)
|
||||
}
|
||||
// Run catching the signal rather than the tRunner as a separate
|
||||
// goroutine to avoid adding a goroutine during the sequential
|
||||
// phase as this pollutes the stacktrace output when aborting.
|
||||
go func() { <-t.signal }()
|
||||
})
|
||||
select {
|
||||
case <-t.signal:
|
||||
default:
|
||||
panic("internal error: tRunner exited without sending on t.signal")
|
||||
}
|
||||
ok = ok && !t.Failed()
|
||||
ran = ran || t.ran
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue