diff options
| author | Damien Neil <dneil@google.com> | 2024-06-11 11:02:18 -0700 |
|---|---|---|
| committer | Damien Neil <dneil@google.com> | 2024-11-19 19:40:40 +0000 |
| commit | d90ce588eac7b9105c0ca556a7c6e975fd5c1eca (patch) | |
| tree | 4692a7f87738058c89bba874fe6d53b82786c44a /src/sync | |
| parent | 944df9a7516021f0405cd8adb1e6894ae9872cb5 (diff) | |
| download | go-d90ce588eac7b9105c0ca556a7c6e975fd5c1eca.tar.xz | |
internal/synctest: new package for testing concurrent code
Add an internal (for now) implementation of testing/synctest.
The synctest.Run function executes a tree of goroutines in an
isolated environment using a fake clock. The synctest.Wait function
allows a test to wait for all other goroutines within the test
to reach a blocking point.
For #67434
For #69687
Change-Id: Icb39e54c54cece96517e58ef9cfb18bf68506cfc
Reviewed-on: https://go-review.googlesource.com/c/go/+/591997
Reviewed-by: Michael Pratt <mpratt@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/sync')
| -rw-r--r-- | src/sync/runtime.go | 3 | ||||
| -rw-r--r-- | src/sync/waitgroup.go | 2 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/sync/runtime.go b/src/sync/runtime.go index b4289dd467..99e5bccbee 100644 --- a/src/sync/runtime.go +++ b/src/sync/runtime.go @@ -13,6 +13,9 @@ import "unsafe" // library and should not be used directly. func runtime_Semacquire(s *uint32) +// SemacquireWaitGroup is like Semacquire, but for WaitGroup.Wait. +func runtime_SemacquireWaitGroup(s *uint32) + // Semacquire(RW)Mutex(R) is like Semacquire, but for profiling contended // Mutexes and RWMutexes. // If lifo is true, queue waiter at the head of wait queue. diff --git a/src/sync/waitgroup.go b/src/sync/waitgroup.go index 872d6d87c0..b50ecd94d3 100644 --- a/src/sync/waitgroup.go +++ b/src/sync/waitgroup.go @@ -115,7 +115,7 @@ func (wg *WaitGroup) Wait() { // otherwise concurrent Waits will race with each other. race.Write(unsafe.Pointer(&wg.sema)) } - runtime_Semacquire(&wg.sema) + runtime_SemacquireWaitGroup(&wg.sema) if wg.state.Load() != 0 { panic("sync: WaitGroup is reused before previous Wait has returned") } |
