diff options
author | lukechampine <luke.champine@gmail.com> | 2016-09-30 02:13:33 -0400 |
---|---|---|
committer | lukechampine <luke.champine@gmail.com> | 2016-09-30 02:15:44 -0400 |
commit | d116709dde3e71d6f6f0159e3774fc4ecbb62a7b (patch) | |
tree | 45cf1d28eccfa570d460a452cecd6574cd64054e /stm_test.go | |
parent | expand Select example (diff) | |
download | stm-d116709dde3e71d6f6f0159e3774fc4ecbb62a7b.tar.gz stm-d116709dde3e71d6f6f0159e3774fc4ecbb62a7b.tar.xz |
broadcast in AtomicSet
Diffstat (limited to 'stm_test.go')
-rw-r--r-- | stm_test.go | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/stm_test.go b/stm_test.go index b6ecb16..1b1b737 100644 --- a/stm_test.go +++ b/stm_test.go @@ -199,6 +199,25 @@ func TestReadWritten(t *testing.T) { }) } +func TestAtomicSetRetry(t *testing.T) { + // AtomicSet should cause waiting transactions to retry + x := NewVar(3) + done := make(chan struct{}) + go func() { + Atomically(func(tx *Tx) { + tx.Assert(tx.Get(x).(int) == 5) + }) + done <- struct{}{} + }() + time.Sleep(10 * time.Millisecond) + AtomicSet(x, 5) + select { + case <-done: + case <-time.After(time.Second): + t.Fatal("AtomicSet did not wake up a waiting transaction") + } +} + func BenchmarkAtomicGet(b *testing.B) { x := NewVar(0) for i := 0; i < b.N; i++ { |