]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/tls: convert Conn.activeCall to atomic type
authorcuiweixie <cuiweixie@gmail.com>
Sat, 27 Aug 2022 03:49:49 +0000 (11:49 +0800)
committerGopher Robot <gobot@golang.org>
Thu, 22 Sep 2022 18:24:49 +0000 (18:24 +0000)
Change-Id: I5b063070a17bdeed57e73bfb76125b94268b3bc9
Reviewed-on: https://go-review.googlesource.com/c/go/+/426088
Run-TryBot: Michael Pratt <mpratt@google.com>
Auto-Submit: Michael Pratt <mpratt@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Filippo Valsorda <filippo@golang.org>
Reviewed-by: Benny Siegert <bsiegert@gmail.com>
src/crypto/tls/conn.go

index b1a7dcc42f72c79489dfbcfcfb5ece8e043fff9c..21f693995e0baf6eb200d56bcc94564be05d4f55 100644 (file)
@@ -109,10 +109,9 @@ type Conn struct {
        // handshake, nor deliver application data. Protected by in.Mutex.
        retryCount int
 
-       // activeCall is an atomic int32; the low bit is whether Close has
-       // been called. the rest of the bits are the number of goroutines
-       // in Conn.Write.
-       activeCall int32
+       // activeCall indicates whether Close has been call in the low bit.
+       // the rest of the bits are the number of goroutines in Conn.Write.
+       activeCall atomic.Int32
 
        tmp [16]byte
 }
@@ -1108,15 +1107,15 @@ var (
 func (c *Conn) Write(b []byte) (int, error) {
        // interlock with Close below
        for {
-               x := atomic.LoadInt32(&c.activeCall)
+               x := c.activeCall.Load()
                if x&1 != 0 {
                        return 0, net.ErrClosed
                }
-               if atomic.CompareAndSwapInt32(&c.activeCall, x, x+2) {
+               if c.activeCall.CompareAndSwap(x, x+2) {
                        break
                }
        }
-       defer atomic.AddInt32(&c.activeCall, -2)
+       defer c.activeCall.Add(-2)
 
        if err := c.Handshake(); err != nil {
                return 0, err
@@ -1317,11 +1316,11 @@ func (c *Conn) Close() error {
        // Interlock with Conn.Write above.
        var x int32
        for {
-               x = atomic.LoadInt32(&c.activeCall)
+               x = c.activeCall.Load()
                if x&1 != 0 {
                        return net.ErrClosed
                }
-               if atomic.CompareAndSwapInt32(&c.activeCall, x, x|1) {
+               if c.activeCall.CompareAndSwap(x, x|1) {
                        break
                }
        }