lib/relay: Close invitation channel in all error cases (fixes #3726)

This commit is contained in:
Audrius Butkevicius
2016-11-11 22:23:48 +00:00
committed by Jakob Borg
parent f60b424d70
commit 38d28c3f4a
4 changed files with 15 additions and 7 deletions

View File

@@ -63,6 +63,7 @@ func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan pro
}
func (c *staticClient) Serve() {
defer c.cleanup()
c.stop = make(chan struct{})
c.stopped = make(chan struct{})
defer close(c.stopped)
@@ -156,10 +157,6 @@ func (c *staticClient) Serve() {
} else {
c.err = nil
}
if c.closeInvitationsOnFinish {
close(c.invitations)
c.invitations = make(chan protocol.SessionInvitation)
}
c.mut.Unlock()
return
@@ -209,6 +206,15 @@ func (c *staticClient) Invitations() chan protocol.SessionInvitation {
return inv
}
func (c *staticClient) cleanup() {
c.mut.Lock()
if c.closeInvitationsOnFinish {
close(c.invitations)
c.invitations = make(chan protocol.SessionInvitation)
}
c.mut.Unlock()
}
func (c *staticClient) connect() error {
if c.uri.Scheme != "relay" {
return fmt.Errorf("Unsupported relay schema: %v", c.uri.Scheme)