mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-28 01:52:26 -06:00
65 lines
3.7 KiB
Java
65 lines
3.7 KiB
Java
package kotlin.concurrent;
|
|
|
|
import androidx.exifinterface.media.ExifInterface;
|
|
import java.util.concurrent.locks.Lock;
|
|
import java.util.concurrent.locks.ReentrantReadWriteLock;
|
|
import kotlin.Metadata;
|
|
import kotlin.jvm.functions.Function0;
|
|
import kotlin.jvm.internal.InlineMarker;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
|
|
/* compiled from: Locks.kt */
|
|
@Metadata(d1 = {"\u0000\u001a\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0003\u001a6\u0010\u0000\u001a\u0002H\u0001\"\u0004\b\u0000\u0010\u0001*\u00020\u00022\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u0002H\u00010\u0004H\u0087\bø\u0001\u0000\u0082\u0002\n\n\b\b\u0001\u0012\u0002\u0010\u0001 \u0001¢\u0006\u0002\u0010\u0005\u001a6\u0010\u0006\u001a\u0002H\u0001\"\u0004\b\u0000\u0010\u0001*\u00020\u00072\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u0002H\u00010\u0004H\u0087\bø\u0001\u0000\u0082\u0002\n\n\b\b\u0001\u0012\u0002\u0010\u0001 \u0001¢\u0006\u0002\u0010\b\u001a6\u0010\t\u001a\u0002H\u0001\"\u0004\b\u0000\u0010\u0001*\u00020\u00022\f\u0010\u0003\u001a\b\u0012\u0004\u0012\u0002H\u00010\u0004H\u0087\bø\u0001\u0000\u0082\u0002\n\n\b\b\u0001\u0012\u0002\u0010\u0001 \u0001¢\u0006\u0002\u0010\u0005\u0082\u0002\u0007\n\u0005\b\u009920\u0001¨\u0006\n"}, d2 = {"read", ExifInterface.GPS_DIRECTION_TRUE, "Ljava/util/concurrent/locks/ReentrantReadWriteLock;", "action", "Lkotlin/Function0;", "(Ljava/util/concurrent/locks/ReentrantReadWriteLock;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;", "withLock", "Ljava/util/concurrent/locks/Lock;", "(Ljava/util/concurrent/locks/Lock;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object;", "write", "kotlin-stdlib"}, k = 2, mv = {1, 9, 0}, xi = 48)
|
|
/* loaded from: classes3.dex */
|
|
public final class LocksKt {
|
|
private static final <T> T withLock(Lock lock, Function0<? extends T> action) {
|
|
Intrinsics.checkNotNullParameter(lock, "<this>");
|
|
Intrinsics.checkNotNullParameter(action, "action");
|
|
lock.lock();
|
|
try {
|
|
return action.invoke();
|
|
} finally {
|
|
InlineMarker.finallyStart(1);
|
|
lock.unlock();
|
|
InlineMarker.finallyEnd(1);
|
|
}
|
|
}
|
|
|
|
private static final <T> T read(ReentrantReadWriteLock reentrantReadWriteLock, Function0<? extends T> action) {
|
|
Intrinsics.checkNotNullParameter(reentrantReadWriteLock, "<this>");
|
|
Intrinsics.checkNotNullParameter(action, "action");
|
|
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();
|
|
readLock.lock();
|
|
try {
|
|
return action.invoke();
|
|
} finally {
|
|
InlineMarker.finallyStart(1);
|
|
readLock.unlock();
|
|
InlineMarker.finallyEnd(1);
|
|
}
|
|
}
|
|
|
|
private static final <T> T write(ReentrantReadWriteLock reentrantReadWriteLock, Function0<? extends T> action) {
|
|
Intrinsics.checkNotNullParameter(reentrantReadWriteLock, "<this>");
|
|
Intrinsics.checkNotNullParameter(action, "action");
|
|
ReentrantReadWriteLock.ReadLock readLock = reentrantReadWriteLock.readLock();
|
|
int i = 0;
|
|
int readHoldCount = reentrantReadWriteLock.getWriteHoldCount() == 0 ? reentrantReadWriteLock.getReadHoldCount() : 0;
|
|
for (int i2 = 0; i2 < readHoldCount; i2++) {
|
|
readLock.unlock();
|
|
}
|
|
ReentrantReadWriteLock.WriteLock writeLock = reentrantReadWriteLock.writeLock();
|
|
writeLock.lock();
|
|
try {
|
|
return action.invoke();
|
|
} finally {
|
|
InlineMarker.finallyStart(1);
|
|
while (i < readHoldCount) {
|
|
readLock.lock();
|
|
i++;
|
|
}
|
|
writeLock.unlock();
|
|
InlineMarker.finallyEnd(1);
|
|
}
|
|
}
|
|
}
|