From 3924fe92b61042df7bef5c19db0ab0316d111e9b Mon Sep 17 00:00:00 2001 From: Damien Neil Date: Fri, 7 Feb 2025 09:55:15 -0800 Subject: runtime: establish happens-before between goroutine and bubble exit synctest.Run waits for all bubbled goroutines to exit before returning. Establish a happens-before relationship between the bubbled goroutines exiting and Run returning. For #67434 Change-Id: Ibda7ec2075ae50838c0851e60dc5b3c6f3ca70fb Reviewed-on: https://go-review.googlesource.com/c/go/+/647755 LUCI-TryBot-Result: Go LUCI Auto-Submit: Damien Neil Reviewed-by: Michael Pratt --- src/runtime/synctest.go | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/runtime') diff --git a/src/runtime/synctest.go b/src/runtime/synctest.go index 498c3b92dd..65bb15dfbb 100644 --- a/src/runtime/synctest.go +++ b/src/runtime/synctest.go @@ -182,6 +182,8 @@ func synctestRun(f func()) { sg.active++ for { if raceenabled { + // Establish a happens-before relationship between a timer being created, + // and the timer running. raceacquireg(gp, gp.syncGroup.raceaddr()) } unlock(&sg.mu) @@ -205,6 +207,11 @@ func synctestRun(f func()) { total := sg.total unlock(&sg.mu) + if raceenabled { + // Establish a happens-before relationship between bubbled goroutines exiting + // and Run returning. + raceacquireg(gp, gp.syncGroup.raceaddr()) + } if total != 1 { panic("deadlock: all goroutines in bubble are blocked") } -- cgit v1.3-5-g9baa