aboutsummaryrefslogtreecommitdiff
path: root/tx.go
diff options
context:
space:
mode:
Diffstat (limited to 'tx.go')
-rw-r--r--tx.go19
1 files changed, 17 insertions, 2 deletions
diff --git a/tx.go b/tx.go
index 5dd41ae..bae2006 100644
--- a/tx.go
+++ b/tx.go
@@ -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)
+}