From 7f73c0342e8996bc74b3283808b679eb055dd561 Mon Sep 17 00:00:00 2001 From: Neil Alexander Date: Sat, 12 Nov 2022 11:27:25 +0000 Subject: [PATCH] Close `errch` in early error or already-connected conditions --- src/core/link.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/link.go b/src/core/link.go index 3d812c94..fa2e3325 100644 --- a/src/core/link.go +++ b/src/core/link.go @@ -113,6 +113,7 @@ func (l *links) isConnectedTo(info linkInfo) bool { func (l *links) call(u *url.URL, sintf string, errch chan<- error) (info linkInfo, err error) { info = linkInfoFor(u.Scheme, sintf, u.Host) if l.isConnectedTo(info) { + close(errch) // already connected, no error return info, nil } options := linkOptions{ @@ -121,6 +122,7 @@ func (l *links) call(u *url.URL, sintf string, errch chan<- error) (info linkInf for _, pubkey := range u.Query()["key"] { sigPub, err := hex.DecodeString(pubkey) if err != nil { + close(errch) return info, fmt.Errorf("pinned key contains invalid hex characters") } var sigPubKey keyArray @@ -130,6 +132,7 @@ func (l *links) call(u *url.URL, sintf string, errch chan<- error) (info linkInf if p := u.Query().Get("priority"); p != "" { pi, err := strconv.ParseUint(p, 10, 8) if err != nil { + close(errch) return info, fmt.Errorf("priority invalid: %w", err) } options.priority = uint8(pi) @@ -205,6 +208,7 @@ func (l *links) call(u *url.URL, sintf string, errch chan<- error) (info linkInf }() default: + close(errch) return info, errors.New("unknown call scheme: " + u.Scheme) } return info, nil