diff options
author | Christophe Grand <christophe@cgrand.net> | 2009-08-03 11:40:58 +0200 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-08-03 09:22:54 -0400 |
commit | 833f9f368d2274766aa4699195b3fba3f9e4e8f0 (patch) | |
tree | c339ea025f383ae32c799b39472aee30da07a004 | |
parent | c04588170427366373b400a9728363c5c985d2a1 (diff) |
fixes commute after set1.0.x
Signed-off-by: Rich Hickey <richhickey@gmail.com>
-rw-r--r-- | src/jvm/clojure/lang/LockingTransaction.java | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/src/jvm/clojure/lang/LockingTransaction.java b/src/jvm/clojure/lang/LockingTransaction.java index 66a262e7..00520876 100644 --- a/src/jvm/clojure/lang/LockingTransaction.java +++ b/src/jvm/clojure/lang/LockingTransaction.java @@ -240,6 +240,8 @@ Object run(Callable fn) throws Exception{ for(Map.Entry<Ref, ArrayList<CFn>> e : commutes.entrySet()) { Ref ref = e.getKey(); + if(sets.contains(ref)) continue; + ref.lock.writeLock().lock(); locked.add(ref); Info refinfo = ref.tinfo; @@ -249,8 +251,7 @@ Object run(Callable fn) throws Exception{ throw retryex; } Object val = ref.tvals == null ? null : ref.tvals.val; - if(!sets.contains(ref)) - vals.put(ref, val); + vals.put(ref, val); for(CFn f : e.getValue()) { vals.put(ref, f.fn.applyTo(RT.cons(vals.get(ref), f.args))); @@ -258,11 +259,8 @@ Object run(Callable fn) throws Exception{ } for(Ref ref : sets) { - if(!commutes.containsKey(ref)) - { - ref.lock.writeLock().lock(); - locked.add(ref); - } + ref.lock.writeLock().lock(); + locked.add(ref); } //validate and enqueue notifications |