aboutsummaryrefslogtreecommitdiff
path: root/var.go
diff options
context:
space:
mode:
authorMatt Joiner <anacrolix@gmail.com>2019-11-05 11:49:42 +1100
committerMatt Joiner <anacrolix@gmail.com>2019-11-05 11:49:42 +1100
commitcc0357f5252666ef67bb8f73f86b47ddbdb245be (patch)
treed32209c3cc4696849b79f245f8f2eef45b034b9d /var.go
parentAdd expvars (diff)
downloadstm-cc0357f5252666ef67bb8f73f86b47ddbdb245be.tar.gz
stm-cc0357f5252666ef67bb8f73f86b47ddbdb245be.tar.xz
Optimize AtomicSet
Diffstat (limited to 'var.go')
-rw-r--r--var.go11
1 files changed, 11 insertions, 0 deletions
diff --git a/var.go b/var.go
index 4859643..facad56 100644
--- a/var.go
+++ b/var.go
@@ -19,6 +19,17 @@ func (v *Var) loadState() varSnapshot {
func (v *Var) changeValue(new interface{}) {
version := v.loadState().version
v.state.Store(varSnapshot{version: version + 1, val: new})
+ v.wakeWatchers()
+}
+
+func (v *Var) wakeWatchers() {
+ v.watchers.Range(func(k, _ interface{}) bool {
+ tx := k.(*Tx)
+ tx.mu.Lock()
+ tx.cond.Broadcast()
+ tx.mu.Unlock()
+ return true
+ })
}
type varSnapshot struct {