core: Fix ListenQUIC listener key conflict

Reported on commit e3e8aabbcf

Abused this change in some bash for loops to rapidly reload config
while making requests and didn't observe any memory or resource leaks.
This commit is contained in:
Matthew Holt 2022-09-29 10:32:02 -06:00
parent e2991eb019
commit ab720fb768
No known key found for this signature in database
GPG key ID: 2A349DD577D586A5

View file

@ -436,7 +436,7 @@ func ListenPacket(network, addr string) (net.PacketConn, error) {
// //
// TODO: See if we can find a more elegant solution closer to the new NetworkAddress.Listen API. // TODO: See if we can find a more elegant solution closer to the new NetworkAddress.Listen API.
func ListenQUIC(ln net.PacketConn, tlsConf *tls.Config, activeRequests *int64) (quic.EarlyListener, error) { func ListenQUIC(ln net.PacketConn, tlsConf *tls.Config, activeRequests *int64) (quic.EarlyListener, error) {
lnKey := listenerKey(ln.LocalAddr().Network(), ln.LocalAddr().String()) lnKey := listenerKey("quic+"+ln.LocalAddr().Network(), ln.LocalAddr().String())
sharedEarlyListener, _, err := listenerPool.LoadOrNew(lnKey, func() (Destructor, error) { sharedEarlyListener, _, err := listenerPool.LoadOrNew(lnKey, func() (Destructor, error) {
earlyLn, err := quic.ListenEarly(ln, http3.ConfigureTLSConfig(tlsConf), &quic.Config{ earlyLn, err := quic.ListenEarly(ln, http3.ConfigureTLSConfig(tlsConf), &quic.Config{
@ -451,7 +451,6 @@ func ListenQUIC(ln net.PacketConn, tlsConf *tls.Config, activeRequests *int64) (
if err != nil { if err != nil {
return nil, err return nil, err
} }
return &sharedQuicListener{EarlyListener: earlyLn, key: lnKey}, nil return &sharedQuicListener{EarlyListener: earlyLn, key: lnKey}, nil
}) })
if err != nil { if err != nil {