diff options
Diffstat (limited to 'tx.go')
-rw-r--r-- | tx.go | 19 |
1 files changed, 17 insertions, 2 deletions
@@ -24,16 +24,17 @@ func (tx *Tx) verify() bool { return true } -// commit writes the values in the transaction log to their respective Vars. +// Writes the values in the transaction log to their respective Vars. func (tx *Tx) commit() { for v, val := range tx.writes { v.mu.Lock() v.val = val v.version++ + v.mu.Unlock() for tx := range v.watchers { tx.cond.Broadcast() + delete(v.watchers, tx) } - v.mu.Unlock() } } @@ -95,3 +96,17 @@ func (tx *Tx) Return(v interface{}) { type _return struct { value interface{} } + +func (tx *Tx) reset() { + for k := range tx.reads { + delete(tx.reads, k) + } + for k := range tx.writes { + delete(tx.writes, k) + } +} + +func (tx *Tx) recycle() { + tx.reset() + txPool.Put(tx) +} |