|
|
|
|
@ -1468,8 +1468,8 @@ func (a addr) String() string { return a.ln.addr }
|
|
|
|
|
// cleanupListener wraps a net.Listener with a function to be run on Close.
|
|
|
|
|
type cleanupListener struct {
|
|
|
|
|
net.Listener
|
|
|
|
|
cleanup func() error
|
|
|
|
|
cleanupOnce sync.Once
|
|
|
|
|
cleanup func() error // nil if unused
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (cl *cleanupListener) Close() error {
|
|
|
|
|
@ -1479,15 +1479,5 @@ func (cl *cleanupListener) Close() error {
|
|
|
|
|
cleanupErr = cl.cleanup()
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
closeErr := cl.Listener.Close()
|
|
|
|
|
switch {
|
|
|
|
|
case closeErr != nil && cleanupErr != nil:
|
|
|
|
|
return fmt.Errorf("%w; also: %w", closeErr, cleanupErr)
|
|
|
|
|
case closeErr != nil:
|
|
|
|
|
return closeErr
|
|
|
|
|
case cleanupErr != nil:
|
|
|
|
|
return cleanupErr
|
|
|
|
|
default:
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
return errors.Join(cl.Listener.Close(), cleanupErr)
|
|
|
|
|
}
|
|
|
|
|
|