From 5090006e2d745963a8a160d04344d2e91773db63 Mon Sep 17 00:00:00 2001 From: Sergey Cherepanov Date: Tue, 6 Jun 2023 18:43:46 +0200 Subject: [PATCH] fix handshake race --- net/secureservice/handshake/credential.go | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/net/secureservice/handshake/credential.go b/net/secureservice/handshake/credential.go index e9baeea5..8a4760a0 100644 --- a/net/secureservice/handshake/credential.go +++ b/net/secureservice/handshake/credential.go @@ -12,13 +12,17 @@ func OutgoingHandshake(ctx context.Context, conn io.ReadWriteCloser, peerId stri } h := newHandshake() done := make(chan struct{}) + var ( + resIdentity []byte + resErr error + ) go func() { defer close(done) - identity, err = outgoingHandshake(h, conn, peerId, cc) + resIdentity, resErr = outgoingHandshake(h, conn, peerId, cc) }() select { case <-done: - return + return resIdentity, resErr case <-ctx.Done(): _ = conn.Close() return nil, ctx.Err() @@ -74,13 +78,17 @@ func IncomingHandshake(ctx context.Context, conn io.ReadWriteCloser, peerId stri } h := newHandshake() done := make(chan struct{}) + var ( + resIdentity []byte + resError error + ) go func() { defer close(done) - identity, err = incomingHandshake(h, conn, peerId, cc) + resIdentity, resError = incomingHandshake(h, conn, peerId, cc) }() select { case <-done: - return + return resIdentity, resError case <-ctx.Done(): _ = conn.Close() return nil, ctx.Err()