Third occurrence in two days (PR #210 run 32574755659, PR #211 run 32577297261; both in packages the PRs do not touch).
Symptom: the -race test binary for internal/realtime panics with "test timed out after 3m0s" inside TestHub_MaxClientsZeroIsUnlimited. Goroutine dump shows the test goroutine parked in sync.WaitGroup.Wait at hub.go:396 (via hub_maxclients_test.go:150) while a hub goroutine is blocked on a channel send at hub.go:463 for 2+ minutes.
Prior related fix: PR #191 closed the leaked-hijacked-conn hang in this file (conns closed via defer registered after srv.Close's, LIFO). This is a different park point: the chan send at hub.go:463 suggests a client writer queue full / reader-not-draining path that only bites on starved 2-core runners.
Repro attempts should amplify with GOMAXPROCS=2 and -race, mirroring the shared runner.
Not blocking merges structurally — reruns pass — but it has now cost three pipeline retries. Worth an owner.
Third occurrence in two days (PR #210 run 32574755659, PR #211 run 32577297261; both in packages the PRs do not touch).
Symptom: the -race test binary for internal/realtime panics with "test timed out after 3m0s" inside TestHub_MaxClientsZeroIsUnlimited. Goroutine dump shows the test goroutine parked in sync.WaitGroup.Wait at hub.go:396 (via hub_maxclients_test.go:150) while a hub goroutine is blocked on a channel send at hub.go:463 for 2+ minutes.
Prior related fix: PR #191 closed the leaked-hijacked-conn hang in this file (conns closed via defer registered after srv.Close's, LIFO). This is a different park point: the chan send at hub.go:463 suggests a client writer queue full / reader-not-draining path that only bites on starved 2-core runners.
Repro attempts should amplify with GOMAXPROCS=2 and -race, mirroring the shared runner.
Not blocking merges structurally — reruns pass — but it has now cost three pipeline retries. Worth an owner.