MCPcopy Index your code
hub / github.com/clojure/clojure / lock

Method lock

src/jvm/clojure/lang/LockingTransaction.java:127–159  ·  view source on GitHub ↗
(Ref ref)

Source from the content-addressed store, hash-verified

125
126//returns the most recent val
127Object lock(Ref ref){
128 //can't upgrade readLock, so release it
129 releaseIfEnsured(ref);
130
131 boolean unlocked = true;
132 try
133 {
134 tryWriteLock(ref);
135 unlocked = false;
136
137 if(ref.tvals != null && ref.tvals.point > readPoint)
138 throw retryex;
139 Info refinfo = ref.tinfo;
140
141 //write lock conflict
142 if(refinfo != null && refinfo != info && refinfo.running())
143 {
144 if(!barge(refinfo))
145 {
146 ref.lock.writeLock().unlock();
147 unlocked = true;
148 return blockAndBail(refinfo);
149 }
150 }
151 ref.tinfo = info;
152 return ref.tvals == null ? null : ref.tvals.val;
153 }
154 finally
155 {
156 if(!unlocked)
157 ref.lock.writeLock().unlock();
158 }
159}
160
161private Object blockAndBail(Info refinfo){
162//stop prior to blocking

Callers 15

doSetMethod · 0.95
currentValMethod · 0.80
isBoundMethod · 0.80
trimHistoryMethod · 0.80
getHistoryCountMethod · 0.80
realizeMethod · 0.80
resetMethod · 0.80
addMethodMethod · 0.80
removeMethodMethod · 0.80
preferMethodMethod · 0.80
resetCacheMethod · 0.80

Calls 5

releaseIfEnsuredMethod · 0.95
tryWriteLockMethod · 0.95
runningMethod · 0.95
bargeMethod · 0.95
blockAndBailMethod · 0.95

Tested by

no test coverage detected