]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/race: fix benchmark deadlock
authorAustin Clements <austin@google.com>
Mon, 27 Apr 2015 20:31:16 +0000 (16:31 -0400)
committerAustin Clements <austin@google.com>
Mon, 27 Apr 2015 20:54:34 +0000 (20:54 +0000)
Currently TestRaceCrawl fails to wg.Done for every wg.Adds if the
depth ever reaches 0. This causes the test to deadlock. Under the race
detector, this deadlock is not detected, so the test eventually times
out.

This only recently became a problem. Prior to commit e870f06 the depth
would never reach 0 because the strict round-robin goroutine schedule
ensured that all of the URLs were already "seen" by depth 2. Now that
the runtime prefers scheduling the most recently started goroutine,
the test is able to reach depth 0 and trigger this deadlock.

Change-Id: I5176302a89614a344c84d587073b364833af6590
Reviewed-on: https://go-review.googlesource.com/9344
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: Russ Cox <rsc@golang.org>
src/runtime/race/testdata/mop_test.go

index cb17a27d37a189a219430266fc460e4bc60ba06b..095ead6c9ad81c6b898068b044a6e5d370a7ca92 100644 (file)
@@ -1063,6 +1063,7 @@ func TestRaceCrawl(t *testing.T) {
                }()
                seen[u] = true
                if d <= 0 {
+                       wg.Done()
                        return
                }
                urls := [...]string{"a", "b", "c"}