internal/http3: wait until clientConn is unregistered when closing it

The longtest in std is currently failing due to lingering goroutines at
the end of tests. This seems to be occurring due to CloseIdleConnections
being called before the clientConn had the chance to be fully
unregistered from the transport. This results in CloseIdleConnections
being unable to close the QUIC endpoint (thinking that there are still
active connections).

Make sure that clientConn.Close only returns after clientConn is
unregistered from the transport to fix this.

Unfortunately, this race condition seems to occur only when testing in
std using fakenet. Therefore, no tests in this CL for now.

For golang/go#78701
For golang/go#70914

Change-Id: I35c66b3e843be5f53ceef602d0ac456f6a6a6964
Reviewed-on: https://go-review.googlesource.com/c/net/+/820540
Reviewed-by: Nicholas Husin <husin@google.com>
LUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Damien Neil <dneil@google.com>
1 file changed
tree: 08b796de226eec80a391dfaeb9cda6fb0a6935e5
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. http3/
  9. icmp/
  10. idna/
  11. internal/
  12. ipv4/
  13. ipv6/
  14. lif/
  15. nettest/
  16. netutil/
  17. proxy/
  18. publicsuffix/
  19. quic/
  20. route/
  21. trace/
  22. webdav/
  23. websocket/
  24. xsrftoken/
  25. .gitattributes
  26. .gitignore
  27. codereview.cfg
  28. CONTRIBUTING.md
  29. go.mod
  30. go.sum
  31. LICENSE
  32. PATENTS
  33. README.md
README.md

Go Networking

Go Reference

This repository holds supplementary Go networking packages.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://go.dev/doc/contribute.

The git repository is https://go.googlesource.com/net.

The main issue tracker for the net repository is located at https://go.dev/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.