diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-08-28 09:16:29 -0400 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-08-28 09:16:29 -0400 |
commit | b942b1758040f3f96dacb7e0cecb148913ba5f1e (patch) | |
tree | e430e312e9e214f98f31378c3e5a88f6c322ccc8 | |
parent | c4a15a238e772d51f6eb2d38861c95cb4740ca3f (diff) |
fix - handle completed write between snapshot and ensure
-rw-r--r-- | src/jvm/clojure/lang/LockingTransaction.java | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/jvm/clojure/lang/LockingTransaction.java b/src/jvm/clojure/lang/LockingTransaction.java index 2d778261..ab69e223 100644 --- a/src/jvm/clojure/lang/LockingTransaction.java +++ b/src/jvm/clojure/lang/LockingTransaction.java @@ -434,6 +434,12 @@ void doEnsure(Ref ref){ return; ref.lock.readLock().lock(); + //someone completed a write after our snapshot + if(ref.tvals != null && ref.tvals.point > readPoint) { + ref.lock.readLock().unlock(); + throw retryex; + } + Info refinfo = ref.tinfo; //writer exists |