quic: fix race condition in runAsync test helper

asyncTestState.wakeAsync runs on the conn's goroutine and
accesses as.blocked, so we need to hold as.mu while
initializing as.blocked in runAsync.

For golang/go#58547

Change-Id: Idb5921895cee89dfceec2b2439c43f2e380b64ce
Reviewed-on: https://go-review.googlesource.com/c/net/+/524095
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
diff --git a/internal/quic/conn_async_test.go b/internal/quic/conn_async_test.go
index 0da3ddb..5b419c4 100644
--- a/internal/quic/conn_async_test.go
+++ b/internal/quic/conn_async_test.go
@@ -101,7 +101,9 @@
 	as := &ts.asyncTestState
 	if as.notify == nil {
 		as.notify = make(chan struct{})
+		as.mu.Lock()
 		as.blocked = make(map[*blockedAsync]struct{})
+		as.mu.Unlock()
 	}
 	_, file, line, _ := runtime.Caller(1)
 	ctx := context.WithValue(context.Background(), asyncContextKey{}, true)