summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-08-28 09:16:29 -0400
committerRich Hickey <richhickey@gmail.com>2009-08-28 09:16:29 -0400
commitb942b1758040f3f96dacb7e0cecb148913ba5f1e (patch)
treee430e312e9e214f98f31378c3e5a88f6c322ccc8 /src
parentc4a15a238e772d51f6eb2d38861c95cb4740ca3f (diff)
fix - handle completed write between snapshot and ensure
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/LockingTransaction.java6
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