KT-1189 StackOverflow in ide
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
//KT-1189 StackOverflow in ide
|
||||
package kt1189
|
||||
//+JDK
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
|
||||
inline fun <erased T> ReentrantReadWriteLock.write(action: ()->T) : T {
|
||||
val rl = readLock().sure()
|
||||
var readCount = 0
|
||||
val writeCount = getWriteHoldCount()
|
||||
if(writeCount == 0) {
|
||||
readCount = getReadHoldCount()
|
||||
if(readCount > 0)
|
||||
for(i in 1..readCount)
|
||||
rl.unlock()
|
||||
}
|
||||
|
||||
val wl = writeLock().sure()
|
||||
wl.lock()
|
||||
try {
|
||||
return action()
|
||||
}
|
||||
finally {
|
||||
if(readCount > 0) {
|
||||
for(j in 1..readCount) {
|
||||
rl.lock()
|
||||
}
|
||||
}
|
||||
wl.unlock()
|
||||
}
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
try {
|
||||
return
|
||||
}
|
||||
finally {
|
||||
for (i in 1..10) {}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user