diff --git a/vendor/git.autistici.org/id/auth/client/client.go b/vendor/git.autistici.org/id/auth/client/client.go index 81f434ae0f249c299050230af3a1b229a33d93b9..245a4029a19057765f53d11a254dea33da140855 100644 --- a/vendor/git.autistici.org/id/auth/client/client.go +++ b/vendor/git.autistici.org/id/auth/client/client.go @@ -28,14 +28,21 @@ func New(socketPath string) Client { } func (c *socketClient) Authenticate(ctx context.Context, req *auth.Request) (*auth.Response, error) { + // Create the connection outside of the timed goroutine, so + // that we can call Close() on exit regardless of the reason: + // this way, when a timeout occurs or the context is canceled, + // the pending request terminates immediately. conn, err := textproto.Dial("unix", c.socketPath) if err != nil { return nil, err } defer conn.Close() + // Make space in the channel for at least one element, or we + // will leak a goroutine whenever the authentication request + // times out. + done := make(chan error, 1) var resp auth.Response - done := make(chan error) go func() { defer close(done) diff --git a/vendor/vendor.json b/vendor/vendor.json index 0a5653c1d234b00742970edab0290ccb159412cd..a62ab612faa86ff1c972a54961baaf358e915715 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -29,14 +29,14 @@ { "checksumSHA1": "6D5Xt9WoGSeTJE3XFw6P2/nKYrQ=", "path": "git.autistici.org/id/auth", - "revision": "d5da26d7565082baa108a1c1806f2fc723d33ccb", - "revisionTime": "2018-11-18T17:43:45Z" + "revision": "1276ec2bd95945ea45a8680a15b76cad8a339096", + "revisionTime": "2018-11-22T22:30:45Z" }, { - "checksumSHA1": "48njEQBB73cV6tTPBEOnzSVRjeA=", + "checksumSHA1": "t3JTZ0bAMQit79HYbcEykC8uxro=", "path": "git.autistici.org/id/auth/client", - "revision": "d5da26d7565082baa108a1c1806f2fc723d33ccb", - "revisionTime": "2018-11-18T17:43:45Z" + "revision": "1276ec2bd95945ea45a8680a15b76cad8a339096", + "revisionTime": "2018-11-22T22:30:45Z" }, { "checksumSHA1": "MlpsZgRytv/c9IX9YawRJDN/ibQ=",