[kotlin] fix NPE from lockWithPCECheck when action lambda returns a nullable value

This commit is contained in:
Ilya Kirillov
2022-12-14 13:02:01 +01:00
parent 65f71cccc9
commit 561df74419
@@ -25,21 +25,17 @@ internal inline fun <T> executeWithoutPCE(crossinline action: () -> T): T {
} }
internal inline fun <T> Lock.lockWithPCECheck(lockingIntervalMs: Long, action: () -> T): T { internal inline fun <T> Lock.lockWithPCECheck(lockingIntervalMs: Long, action: () -> T): T {
var needToRun = true while (true) {
var result: T? = null
while (needToRun) {
checkCanceled() checkCanceled()
if (tryLock(lockingIntervalMs, TimeUnit.MILLISECONDS)) { if (tryLock(lockingIntervalMs, TimeUnit.MILLISECONDS)) {
try { try {
checkCanceled() checkCanceled()
needToRun = false return action()
result = action()
} finally { } finally {
unlock() unlock()
} }
} }
} }
return result!!
} }
@Suppress("NOTHING_TO_INLINE") @Suppress("NOTHING_TO_INLINE")