|
|
|
|
@ -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) |
|
|
|
|
} |
|
|
|
|
|