]> Cypherpunks repositories - gostls13.git/commitdiff
runtime: really wait for goroutines in testSemaHandoff
authorIan Lance Taylor <iant@golang.org>
Thu, 13 Feb 2020 04:17:16 +0000 (20:17 -0800)
committerIan Lance Taylor <iant@golang.org>
Sat, 22 Feb 2020 04:08:12 +0000 (04:08 +0000)
The code has a comment saying that it waited for the goroutines,
but it didn't actually do so.

Change-Id: Icaeb40613711053a9f443cc34143835560427dda
Reviewed-on: https://go-review.googlesource.com/c/go/+/219277
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/runtime/sema_test.go

index 8bd5d4ce57cada07930f08d87707e4fa69fff31f..cf3de0a1909831a312674954c35b9481ae324b68 100644 (file)
@@ -6,6 +6,7 @@ package runtime_test
 
 import (
        . "runtime"
+       "sync"
        "sync/atomic"
        "testing"
 )
@@ -61,8 +62,11 @@ func testSemaHandoff() bool {
        // to another goroutine. Stop the current goroutine from migrating to
        // another CPU where it can win the race (and appear to have not yielded) by
        // keeping the CPUs slightly busy.
+       var wg sync.WaitGroup
        for i := 0; i < GOMAXPROCS(-1); i++ {
+               wg.Add(1)
                go func() {
+                       defer wg.Done()
                        for {
                                select {
                                case <-done:
@@ -74,7 +78,9 @@ func testSemaHandoff() bool {
                }()
        }
 
+       wg.Add(1)
        go func() {
+               defer wg.Done()
                Semacquire(&sema)
                atomic.CompareAndSwapUint32(&res, 0, 1)
 
@@ -91,7 +97,7 @@ func testSemaHandoff() bool {
        Semrelease1(&sema, true, 0)
        atomic.CompareAndSwapUint32(&res, 0, 2)
 
-       <-done // wait for goroutines to finish to avoid data races
+       wg.Wait() // wait for goroutines to finish to avoid data races
 
        return res == 1 // did the waiter run first?
 }