]> Cypherpunks repositories - gostls13.git/commitdiff
database: convert Tx.done to atomic type
authorcuiweixie <cuiweixie@gmail.com>
Sat, 27 Aug 2022 03:38:32 +0000 (11:38 +0800)
committerDaniel Theophanes <kardianos@gmail.com>
Thu, 8 Sep 2022 15:52:57 +0000 (15:52 +0000)
Change-Id: I9ec725009376f5865adedca6c159b14140dde097
Reviewed-on: https://go-review.googlesource.com/c/go/+/426086
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Michael Knyszek <mknyszek@google.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
Reviewed-by: Daniel Theophanes <kardianos@gmail.com>
Run-TryBot: Daniel Theophanes <kardianos@gmail.com>

src/database/sql/sql.go

index e74dd875f900a7ba174451c3302854f27e69f268..0e0c3ef2abab7e6f4b96331df28638d011683b47 100644 (file)
@@ -2136,11 +2136,10 @@ type Tx struct {
        // any held driverConn back to the pool.
        releaseConn func(error)
 
-       // done transitions from 0 to 1 exactly once, on Commit
+       // done transitions from false to true exactly once, on Commit
        // or Rollback. once done, all operations fail with
        // ErrTxDone.
-       // Use atomic operations on value when checking value.
-       done int32
+       done atomic.Bool
 
        // keepConnOnRollback is true if the driver knows
        // how to reset the connection's session and if need be discard
@@ -2179,7 +2178,7 @@ func (tx *Tx) awaitDone() {
 }
 
 func (tx *Tx) isDone() bool {
-       return atomic.LoadInt32(&tx.done) != 0
+       return tx.done.Load()
 }
 
 // ErrTxDone is returned by any operation that is performed on a transaction
@@ -2248,12 +2247,12 @@ func (tx *Tx) Commit() error {
        select {
        default:
        case <-tx.ctx.Done():
-               if atomic.LoadInt32(&tx.done) == 1 {
+               if tx.done.Load() {
                        return ErrTxDone
                }
                return tx.ctx.Err()
        }
-       if !atomic.CompareAndSwapInt32(&tx.done, 0, 1) {
+       if !tx.done.CompareAndSwap(false, true) {
                return ErrTxDone
        }
 
@@ -2281,7 +2280,7 @@ var rollbackHook func()
 // rollback aborts the transaction and optionally forces the pool to discard
 // the connection.
 func (tx *Tx) rollback(discardConn bool) error {
-       if !atomic.CompareAndSwapInt32(&tx.done, 0, 1) {
+       if !tx.done.CompareAndSwap(false, true) {
                return ErrTxDone
        }