Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
http2: fix flakiness from t.Log when GOOS=js
The http2 package uses a precursor to the experimental testing/synctest package, parsing runtime.Stack output to determine when goroutines are idle. When GOOS=js, some tests which use t.Log are flaky. t.Log blocks in the syscall package writing to stdout. The GOOS=js implementation of the syscall leaves the goroutine blocked on a channel operation, which synctest interprets as the goroutine being "durably blocked". Fix the http2 synctest to treat any goroutine blocked in the syscall package as not being durably blocked. Making this fix reveals another bug when GOOS=js: Looping while calling runtime.Gosched does not appear to permit syscalls to make progress. Add a few time.Sleep(1) calls while waiting for idleness to work around the problem. While changing things in here, change http2's synctest to not treat goroutines blocked on mutex operations as durably blocked. This matches the behavior of testing/synctest. (This would all be simpler if we just used testing/synctest, but we don't want to make the http2 package depend on an experimental API.) Fixes golang/go#67693 Change-Id: I889834e97e4a33f4ef232278b1a78af00d52d261 Reviewed-on: https://go-review.googlesource.com/c/net/+/653696 Reviewed-by: Jonathan Amsterdam <jba@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Auto-Submit: Damien Neil <dneil@google.com>
- Loading branch information