// FIR_IDENTICAL //KT-1189 StackOverflow in ide package kt1189 import java.util.concurrent.locks.ReentrantReadWriteLock inline fun ReentrantReadWriteLock.write(action: ()->T) : T { val rl = readLock() var readCount = 0 val writeCount = getWriteHoldCount() if(writeCount == 0) { readCount = getReadHoldCount() if(readCount > 0) for(i in 1..readCount) rl.unlock() } val wl = writeLock() 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) {} } }