mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
651 lines
39 KiB
Java
651 lines
39 KiB
Java
package kotlinx.coroutines;
|
|
|
|
import androidx.exifinterface.media.ExifInterface;
|
|
import io.sentry.SentryEvent;
|
|
import io.sentry.protocol.SentryThread;
|
|
import java.util.concurrent.CancellationException;
|
|
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
|
|
import java.util.concurrent.atomic.AtomicReferenceFieldUpdater;
|
|
import kotlin.KotlinNothingValueException;
|
|
import kotlin.Metadata;
|
|
import kotlin.Unit;
|
|
import kotlin.coroutines.Continuation;
|
|
import kotlin.coroutines.CoroutineContext;
|
|
import kotlin.coroutines.intrinsics.IntrinsicsKt;
|
|
import kotlin.coroutines.jvm.internal.CoroutineStackFrame;
|
|
import kotlin.jvm.Volatile;
|
|
import kotlin.jvm.functions.Function0;
|
|
import kotlin.jvm.functions.Function1;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
import kotlinx.coroutines.Job;
|
|
import kotlinx.coroutines.internal.DispatchedContinuation;
|
|
import kotlinx.coroutines.internal.Segment;
|
|
import kotlinx.coroutines.internal.StackTraceRecoveryKt;
|
|
import kotlinx.coroutines.internal.Symbol;
|
|
|
|
/* compiled from: CancellableContinuationImpl.kt */
|
|
@Metadata(d1 = {"\u0000È\u0001\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0000\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0010\u000b\n\u0002\b\n\n\u0002\u0010\u000e\n\u0002\b\u0003\n\u0002\u0010\u0001\n\u0002\b\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0003\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u000e\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0017\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\b\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0002\b\u0003\b\u0011\u0018\u0000*\u0006\b\u0000\u0010\u0001 \u00002\b\u0012\u0004\u0012\u0002H\u00010\u00022\b\u0012\u0004\u0012\u0002H\u00010\u00032\u00060\u0004j\u0002`\u00052\u00020\u0006B\u001b\u0012\f\u0010\u0007\u001a\b\u0012\u0004\u0012\u00028\u00000\b\u0012\u0006\u0010\t\u001a\u00020\n¢\u0006\u0002\u0010\u000bJ\u0012\u0010+\u001a\u00020,2\b\u0010-\u001a\u0004\u0018\u00010\u0012H\u0002J\u0018\u0010.\u001a\u00020/2\u0006\u00100\u001a\u0002012\b\u00102\u001a\u0004\u0018\u000103J;\u0010.\u001a\u00020/2'\u00100\u001a#\u0012\u0015\u0012\u0013\u0018\u000103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/04j\u0002`72\b\u00102\u001a\u0004\u0018\u000103H\u0002J\u0017\u00108\u001a\u00020/2\f\u00109\u001a\b\u0012\u0004\u0012\u00020/0:H\u0082\bJ1\u0010;\u001a\u00020/2!\u0010<\u001a\u001d\u0012\u0013\u0012\u001103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/042\u0006\u00102\u001a\u000203J\u001e\u0010=\u001a\u00020/2\n\u0010>\u001a\u0006\u0012\u0002\b\u00030?2\b\u00102\u001a\u0004\u0018\u000103H\u0002J\u0012\u0010@\u001a\u00020\u001d2\b\u00102\u001a\u0004\u0018\u000103H\u0016J\u001f\u0010A\u001a\u00020/2\b\u0010B\u001a\u0004\u0018\u00010\u00122\u0006\u00102\u001a\u000203H\u0010¢\u0006\u0002\bCJ\u0010\u0010D\u001a\u00020\u001d2\u0006\u00102\u001a\u000203H\u0002J\u0010\u0010E\u001a\u00020/2\u0006\u0010F\u001a\u00020\u0012H\u0016J\r\u0010G\u001a\u00020/H\u0000¢\u0006\u0002\bHJ\b\u0010I\u001a\u00020/H\u0002J\u0010\u0010J\u001a\u00020/2\u0006\u0010K\u001a\u00020\nH\u0002J\u0010\u0010L\u001a\u0002032\u0006\u0010M\u001a\u00020NH\u0016J\u0019\u0010O\u001a\u0004\u0018\u0001032\b\u0010$\u001a\u0004\u0018\u00010\u0012H\u0010¢\u0006\u0002\bPJ\n\u0010Q\u001a\u0004\u0018\u00010\u0012H\u0001J\u0010\u0010R\u001a\n\u0018\u00010Sj\u0004\u0018\u0001`TH\u0016J\u001f\u0010U\u001a\u0002H\u0001\"\u0004\b\u0001\u0010\u00012\b\u0010$\u001a\u0004\u0018\u00010\u0012H\u0010¢\u0006\u0004\bV\u0010WJ\b\u0010X\u001a\u00020/H\u0016J\n\u0010Y\u001a\u0004\u0018\u00010\u0010H\u0002J1\u0010Z\u001a\u00020/2'\u00100\u001a#\u0012\u0015\u0012\u0013\u0018\u000103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/04j\u0002`7H\u0016J\u001c\u0010Z\u001a\u00020/2\n\u0010>\u001a\u0006\u0012\u0002\b\u00030?2\u0006\u0010[\u001a\u00020\nH\u0016J\u0010\u0010\\\u001a\u00020/2\u0006\u00100\u001a\u00020\u0012H\u0002J\b\u0010]\u001a\u00020\u001dH\u0002J1\u0010^\u001a\u0002012'\u00100\u001a#\u0012\u0015\u0012\u0013\u0018\u000103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/04j\u0002`7H\u0002J\u001a\u0010_\u001a\u00020/2\u0006\u00100\u001a\u00020\u00122\b\u0010$\u001a\u0004\u0018\u00010\u0012H\u0002J\b\u0010`\u001a\u00020(H\u0014J\u0015\u0010a\u001a\u00020/2\u0006\u00102\u001a\u000203H\u0000¢\u0006\u0002\bbJ\r\u0010c\u001a\u00020/H\u0000¢\u0006\u0002\bdJ\b\u0010e\u001a\u00020\u001dH\u0001J:\u0010f\u001a\u00020/2\u0006\u0010g\u001a\u00028\u00002#\u0010<\u001a\u001f\u0012\u0013\u0012\u001103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/\u0018\u000104H\u0016¢\u0006\u0002\u0010hJA\u0010i\u001a\u00020/2\b\u0010-\u001a\u0004\u0018\u00010\u00122\u0006\u0010\t\u001a\u00020\n2%\b\u0002\u0010<\u001a\u001f\u0012\u0013\u0012\u001103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/\u0018\u000104H\u0002J\u001e\u0010j\u001a\u00020/2\f\u0010k\u001a\b\u0012\u0004\u0012\u00028\u00000lH\u0016ø\u0001\u0000¢\u0006\u0002\u0010mJS\u0010n\u001a\u0004\u0018\u00010\u00122\u0006\u0010$\u001a\u00020o2\b\u0010-\u001a\u0004\u0018\u00010\u00122\u0006\u0010\t\u001a\u00020\n2#\u0010<\u001a\u001f\u0012\u0013\u0012\u001103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/\u0018\u0001042\b\u0010p\u001a\u0004\u0018\u00010\u0012H\u0002J\u000f\u0010q\u001a\u0004\u0018\u00010\u0012H\u0010¢\u0006\u0002\brJ\b\u0010s\u001a\u00020(H\u0016J\b\u0010t\u001a\u00020\u001dH\u0002J!\u0010t\u001a\u0004\u0018\u00010\u00122\u0006\u0010g\u001a\u00028\u00002\b\u0010p\u001a\u0004\u0018\u00010\u0012H\u0016¢\u0006\u0002\u0010uJF\u0010t\u001a\u0004\u0018\u00010\u00122\u0006\u0010g\u001a\u00028\u00002\b\u0010p\u001a\u0004\u0018\u00010\u00122#\u0010<\u001a\u001f\u0012\u0013\u0012\u001103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/\u0018\u000104H\u0016¢\u0006\u0002\u0010vJC\u0010w\u001a\u0004\u0018\u00010x2\b\u0010-\u001a\u0004\u0018\u00010\u00122\b\u0010p\u001a\u0004\u0018\u00010\u00122#\u0010<\u001a\u001f\u0012\u0013\u0012\u001103¢\u0006\f\b5\u0012\b\b6\u0012\u0004\b\b(2\u0012\u0004\u0012\u00020/\u0018\u000104H\u0002J\u0012\u0010y\u001a\u0004\u0018\u00010\u00122\u0006\u0010z\u001a\u000203H\u0016J\b\u0010{\u001a\u00020\u001dH\u0002J\u0019\u0010|\u001a\u00020/*\u00020}2\u0006\u0010g\u001a\u00028\u0000H\u0016¢\u0006\u0002\u0010~J\u0014\u0010\u007f\u001a\u00020/*\u00020}2\u0006\u0010z\u001a\u000203H\u0016R\t\u0010\f\u001a\u00020\rX\u0082\u0004R\u0011\u0010\u000e\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u00100\u000fX\u0082\u0004R\u0011\u0010\u0011\u001a\n\u0012\u0006\u0012\u0004\u0018\u00010\u00120\u000fX\u0082\u0004R\u001c\u0010\u0013\u001a\n\u0018\u00010\u0004j\u0004\u0018\u0001`\u00058VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b\u0014\u0010\u0015R\u0014\u0010\u0016\u001a\u00020\u0017X\u0096\u0004¢\u0006\b\n\u0000\u001a\u0004\b\u0018\u0010\u0019R\u001a\u0010\u0007\u001a\b\u0012\u0004\u0012\u00028\u00000\bX\u0080\u0004¢\u0006\b\n\u0000\u001a\u0004\b\u001a\u0010\u001bR\u0014\u0010\u001c\u001a\u00020\u001d8VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b\u001c\u0010\u001eR\u0014\u0010\u001f\u001a\u00020\u001d8VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b\u001f\u0010\u001eR\u0014\u0010 \u001a\u00020\u001d8VX\u0096\u0004¢\u0006\u0006\u001a\u0004\b \u0010\u001eR\u0016\u0010!\u001a\u0004\u0018\u00010\u00108BX\u0082\u0004¢\u0006\u0006\u001a\u0004\b\"\u0010#R\u0016\u0010$\u001a\u0004\u0018\u00010\u00128@X\u0080\u0004¢\u0006\u0006\u001a\u0004\b%\u0010&R\u0014\u0010'\u001a\u00020(8BX\u0082\u0004¢\u0006\u0006\u001a\u0004\b)\u0010*\u0082\u0002\u0004\n\u0002\b\u0019¨\u0006\u0080\u0001"}, d2 = {"Lkotlinx/coroutines/CancellableContinuationImpl;", ExifInterface.GPS_DIRECTION_TRUE, "Lkotlinx/coroutines/DispatchedTask;", "Lkotlinx/coroutines/CancellableContinuation;", "Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;", "Lkotlinx/coroutines/internal/CoroutineStackFrame;", "Lkotlinx/coroutines/Waiter;", "delegate", "Lkotlin/coroutines/Continuation;", "resumeMode", "", "(Lkotlin/coroutines/Continuation;I)V", "_decisionAndIndex", "Lkotlinx/atomicfu/AtomicInt;", "_parentHandle", "Lkotlinx/atomicfu/AtomicRef;", "Lkotlinx/coroutines/DisposableHandle;", "_state", "", "callerFrame", "getCallerFrame", "()Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;", "context", "Lkotlin/coroutines/CoroutineContext;", "getContext", "()Lkotlin/coroutines/CoroutineContext;", "getDelegate$kotlinx_coroutines_core", "()Lkotlin/coroutines/Continuation;", "isActive", "", "()Z", "isCancelled", "isCompleted", "parentHandle", "getParentHandle", "()Lkotlinx/coroutines/DisposableHandle;", SentryThread.JsonKeys.STATE, "getState$kotlinx_coroutines_core", "()Ljava/lang/Object;", "stateDebugRepresentation", "", "getStateDebugRepresentation", "()Ljava/lang/String;", "alreadyResumedError", "", "proposedUpdate", "callCancelHandler", "", "handler", "Lkotlinx/coroutines/CancelHandler;", "cause", "", "Lkotlin/Function1;", "Lkotlin/ParameterName;", "name", "Lkotlinx/coroutines/CompletionHandler;", "callCancelHandlerSafely", "block", "Lkotlin/Function0;", "callOnCancellation", "onCancellation", "callSegmentOnCancellation", "segment", "Lkotlinx/coroutines/internal/Segment;", "cancel", "cancelCompletedResult", "takenState", "cancelCompletedResult$kotlinx_coroutines_core", "cancelLater", "completeResume", "token", "detachChild", "detachChild$kotlinx_coroutines_core", "detachChildIfNonResuable", "dispatchResume", "mode", "getContinuationCancellationCause", "parent", "Lkotlinx/coroutines/Job;", "getExceptionalResult", "getExceptionalResult$kotlinx_coroutines_core", "getResult", "getStackTraceElement", "Ljava/lang/StackTraceElement;", "Lkotlinx/coroutines/internal/StackTraceElement;", "getSuccessfulResult", "getSuccessfulResult$kotlinx_coroutines_core", "(Ljava/lang/Object;)Ljava/lang/Object;", "initCancellability", "installParentHandle", "invokeOnCancellation", "index", "invokeOnCancellationImpl", "isReusable", "makeCancelHandler", "multipleHandlersError", "nameString", "parentCancelled", "parentCancelled$kotlinx_coroutines_core", "releaseClaimedReusableContinuation", "releaseClaimedReusableContinuation$kotlinx_coroutines_core", "resetStateReusable", "resume", "value", "(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V", "resumeImpl", "resumeWith", "result", "Lkotlin/Result;", "(Ljava/lang/Object;)V", "resumedState", "Lkotlinx/coroutines/NotCompleted;", "idempotent", "takeState", "takeState$kotlinx_coroutines_core", "toString", "tryResume", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", "(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object;", "tryResumeImpl", "Lkotlinx/coroutines/internal/Symbol;", "tryResumeWithException", SentryEvent.JsonKeys.EXCEPTION, "trySuspend", "resumeUndispatched", "Lkotlinx/coroutines/CoroutineDispatcher;", "(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V", "resumeUndispatchedWithException", "kotlinx-coroutines-core"}, k = 1, mv = {1, 8, 0}, xi = 48)
|
|
/* loaded from: classes3.dex */
|
|
public class CancellableContinuationImpl<T> extends DispatchedTask<T> implements CancellableContinuation<T>, CoroutineStackFrame, Waiter {
|
|
|
|
@Volatile
|
|
private volatile int _decisionAndIndex;
|
|
|
|
@Volatile
|
|
private volatile Object _parentHandle;
|
|
|
|
@Volatile
|
|
private volatile Object _state;
|
|
private final CoroutineContext context;
|
|
private final Continuation<T> delegate;
|
|
private static final AtomicIntegerFieldUpdater _decisionAndIndex$FU = AtomicIntegerFieldUpdater.newUpdater(CancellableContinuationImpl.class, "_decisionAndIndex");
|
|
private static final AtomicReferenceFieldUpdater _state$FU = AtomicReferenceFieldUpdater.newUpdater(CancellableContinuationImpl.class, Object.class, "_state");
|
|
private static final AtomicReferenceFieldUpdater _parentHandle$FU = AtomicReferenceFieldUpdater.newUpdater(CancellableContinuationImpl.class, Object.class, "_parentHandle");
|
|
|
|
private final void loop$atomicfu(AtomicIntegerFieldUpdater atomicIntegerFieldUpdater, Function1<? super Integer, Unit> function1, Object obj) {
|
|
while (true) {
|
|
function1.invoke(Integer.valueOf(atomicIntegerFieldUpdater.get(obj)));
|
|
}
|
|
}
|
|
|
|
private final void loop$atomicfu(AtomicReferenceFieldUpdater atomicReferenceFieldUpdater, Function1<Object, Unit> function1, Object obj) {
|
|
while (true) {
|
|
function1.invoke(atomicReferenceFieldUpdater.get(obj));
|
|
}
|
|
}
|
|
|
|
private final void update$atomicfu(AtomicIntegerFieldUpdater atomicIntegerFieldUpdater, Function1<? super Integer, Integer> function1, Object obj) {
|
|
int i;
|
|
do {
|
|
i = atomicIntegerFieldUpdater.get(obj);
|
|
} while (!atomicIntegerFieldUpdater.compareAndSet(obj, i, function1.invoke(Integer.valueOf(i)).intValue()));
|
|
}
|
|
|
|
@Override // kotlin.coroutines.Continuation
|
|
/* renamed from: getContext, reason: from getter */
|
|
public CoroutineContext get$context() {
|
|
return this.context;
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.DispatchedTask
|
|
public final Continuation<T> getDelegate$kotlinx_coroutines_core() {
|
|
return this.delegate;
|
|
}
|
|
|
|
@Override // kotlin.coroutines.jvm.internal.CoroutineStackFrame
|
|
public StackTraceElement getStackTraceElement() {
|
|
return null;
|
|
}
|
|
|
|
protected String nameString() {
|
|
return "CancellableContinuation";
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
public CancellableContinuationImpl(Continuation<? super T> continuation, int i) {
|
|
super(i);
|
|
this.delegate = continuation;
|
|
if (DebugKt.getASSERTIONS_ENABLED() && i == -1) {
|
|
throw new AssertionError();
|
|
}
|
|
this.context = continuation.get$context();
|
|
this._decisionAndIndex = 536870911;
|
|
this._state = Active.INSTANCE;
|
|
}
|
|
|
|
private final DisposableHandle getParentHandle() {
|
|
return (DisposableHandle) _parentHandle$FU.get(this);
|
|
}
|
|
|
|
public final Object getState$kotlinx_coroutines_core() {
|
|
return _state$FU.get(this);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public boolean isActive() {
|
|
return getState$kotlinx_coroutines_core() instanceof NotCompleted;
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public boolean isCompleted() {
|
|
return !(getState$kotlinx_coroutines_core() instanceof NotCompleted);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public boolean isCancelled() {
|
|
return getState$kotlinx_coroutines_core() instanceof CancelledContinuation;
|
|
}
|
|
|
|
private final String getStateDebugRepresentation() {
|
|
Object state$kotlinx_coroutines_core = getState$kotlinx_coroutines_core();
|
|
return state$kotlinx_coroutines_core instanceof NotCompleted ? "Active" : state$kotlinx_coroutines_core instanceof CancelledContinuation ? "Cancelled" : "Completed";
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public void initCancellability() {
|
|
DisposableHandle installParentHandle = installParentHandle();
|
|
if (installParentHandle != null && isCompleted()) {
|
|
installParentHandle.dispose();
|
|
_parentHandle$FU.set(this, NonDisposableHandle.INSTANCE);
|
|
}
|
|
}
|
|
|
|
private final boolean isReusable() {
|
|
if (DispatchedTaskKt.isReusableMode(this.resumeMode)) {
|
|
Continuation<T> continuation = this.delegate;
|
|
Intrinsics.checkNotNull(continuation, "null cannot be cast to non-null type kotlinx.coroutines.internal.DispatchedContinuation<*>");
|
|
if (((DispatchedContinuation) continuation).isReusable()) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public final boolean resetStateReusable() {
|
|
if (DebugKt.getASSERTIONS_ENABLED() && this.resumeMode != 2) {
|
|
throw new AssertionError();
|
|
}
|
|
if (DebugKt.getASSERTIONS_ENABLED() && getParentHandle() == NonDisposableHandle.INSTANCE) {
|
|
throw new AssertionError();
|
|
}
|
|
AtomicReferenceFieldUpdater atomicReferenceFieldUpdater = _state$FU;
|
|
Object obj = atomicReferenceFieldUpdater.get(this);
|
|
if (DebugKt.getASSERTIONS_ENABLED() && !(!(obj instanceof NotCompleted))) {
|
|
throw new AssertionError();
|
|
}
|
|
if ((obj instanceof CompletedContinuation) && ((CompletedContinuation) obj).idempotentResume != null) {
|
|
detachChild$kotlinx_coroutines_core();
|
|
return false;
|
|
}
|
|
_decisionAndIndex$FU.set(this, 536870911);
|
|
atomicReferenceFieldUpdater.set(this, Active.INSTANCE);
|
|
return true;
|
|
}
|
|
|
|
@Override // kotlin.coroutines.jvm.internal.CoroutineStackFrame
|
|
public CoroutineStackFrame getCallerFrame() {
|
|
Continuation<T> continuation = this.delegate;
|
|
if (continuation instanceof CoroutineStackFrame) {
|
|
return (CoroutineStackFrame) continuation;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.DispatchedTask
|
|
public Object takeState$kotlinx_coroutines_core() {
|
|
return getState$kotlinx_coroutines_core();
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.DispatchedTask
|
|
public void cancelCompletedResult$kotlinx_coroutines_core(Object takenState, Throwable cause) {
|
|
AtomicReferenceFieldUpdater atomicReferenceFieldUpdater = _state$FU;
|
|
while (true) {
|
|
Object obj = atomicReferenceFieldUpdater.get(this);
|
|
if (obj instanceof NotCompleted) {
|
|
throw new IllegalStateException("Not completed".toString());
|
|
}
|
|
if (obj instanceof CompletedExceptionally) {
|
|
return;
|
|
}
|
|
if (obj instanceof CompletedContinuation) {
|
|
CompletedContinuation completedContinuation = (CompletedContinuation) obj;
|
|
if (!(!completedContinuation.getCancelled())) {
|
|
throw new IllegalStateException("Must be called at most once".toString());
|
|
}
|
|
if (_state$FU.compareAndSet(this, obj, CompletedContinuation.copy$default(completedContinuation, null, null, null, null, cause, 15, null))) {
|
|
completedContinuation.invokeHandlers(this, cause);
|
|
return;
|
|
}
|
|
} else if (_state$FU.compareAndSet(this, obj, new CompletedContinuation(obj, null, null, null, cause, 14, null))) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private final boolean cancelLater(Throwable cause) {
|
|
if (!isReusable()) {
|
|
return false;
|
|
}
|
|
Continuation<T> continuation = this.delegate;
|
|
Intrinsics.checkNotNull(continuation, "null cannot be cast to non-null type kotlinx.coroutines.internal.DispatchedContinuation<*>");
|
|
return ((DispatchedContinuation) continuation).postponeCancellation(cause);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public boolean cancel(Throwable cause) {
|
|
Object obj;
|
|
AtomicReferenceFieldUpdater atomicReferenceFieldUpdater = _state$FU;
|
|
do {
|
|
obj = atomicReferenceFieldUpdater.get(this);
|
|
if (!(obj instanceof NotCompleted)) {
|
|
return false;
|
|
}
|
|
} while (!_state$FU.compareAndSet(this, obj, new CancelledContinuation(this, cause, (obj instanceof CancelHandler) || (obj instanceof Segment))));
|
|
NotCompleted notCompleted = (NotCompleted) obj;
|
|
if (notCompleted instanceof CancelHandler) {
|
|
callCancelHandler((CancelHandler) obj, cause);
|
|
} else if (notCompleted instanceof Segment) {
|
|
callSegmentOnCancellation((Segment) obj, cause);
|
|
}
|
|
detachChildIfNonResuable();
|
|
dispatchResume(this.resumeMode);
|
|
return true;
|
|
}
|
|
|
|
public final void parentCancelled$kotlinx_coroutines_core(Throwable cause) {
|
|
if (cancelLater(cause)) {
|
|
return;
|
|
}
|
|
cancel(cause);
|
|
detachChildIfNonResuable();
|
|
}
|
|
|
|
private final void callCancelHandlerSafely(Function0<Unit> block) {
|
|
try {
|
|
block.invoke();
|
|
} catch (Throwable th) {
|
|
CoroutineExceptionHandlerKt.handleCoroutineException(get$context(), new CompletionHandlerException("Exception in invokeOnCancellation handler for " + this, th));
|
|
}
|
|
}
|
|
|
|
public final void callCancelHandler(CancelHandler handler, Throwable cause) {
|
|
try {
|
|
handler.invoke(cause);
|
|
} catch (Throwable th) {
|
|
CoroutineExceptionHandlerKt.handleCoroutineException(get$context(), new CompletionHandlerException("Exception in invokeOnCancellation handler for " + this, th));
|
|
}
|
|
}
|
|
|
|
private final void callSegmentOnCancellation(Segment<?> segment, Throwable cause) {
|
|
int i = _decisionAndIndex$FU.get(this) & 536870911;
|
|
if (i == 536870911) {
|
|
throw new IllegalStateException("The index for Segment.onCancellation(..) is broken".toString());
|
|
}
|
|
try {
|
|
segment.onCancellation(i, cause, get$context());
|
|
} catch (Throwable th) {
|
|
CoroutineExceptionHandlerKt.handleCoroutineException(get$context(), new CompletionHandlerException("Exception in invokeOnCancellation handler for " + this, th));
|
|
}
|
|
}
|
|
|
|
public final void callOnCancellation(Function1<? super Throwable, Unit> onCancellation, Throwable cause) {
|
|
try {
|
|
onCancellation.invoke(cause);
|
|
} catch (Throwable th) {
|
|
CoroutineExceptionHandlerKt.handleCoroutineException(get$context(), new CompletionHandlerException("Exception in resume onCancellation handler for " + this, th));
|
|
}
|
|
}
|
|
|
|
public Throwable getContinuationCancellationCause(Job parent) {
|
|
return parent.getCancellationException();
|
|
}
|
|
|
|
private final boolean trySuspend() {
|
|
int i;
|
|
AtomicIntegerFieldUpdater atomicIntegerFieldUpdater = _decisionAndIndex$FU;
|
|
do {
|
|
i = atomicIntegerFieldUpdater.get(this);
|
|
int i2 = i >> 29;
|
|
if (i2 != 0) {
|
|
if (i2 == 2) {
|
|
return false;
|
|
}
|
|
throw new IllegalStateException("Already suspended".toString());
|
|
}
|
|
} while (!_decisionAndIndex$FU.compareAndSet(this, i, 536870912 + (536870911 & i)));
|
|
return true;
|
|
}
|
|
|
|
private final boolean tryResume() {
|
|
int i;
|
|
AtomicIntegerFieldUpdater atomicIntegerFieldUpdater = _decisionAndIndex$FU;
|
|
do {
|
|
i = atomicIntegerFieldUpdater.get(this);
|
|
int i2 = i >> 29;
|
|
if (i2 != 0) {
|
|
if (i2 == 1) {
|
|
return false;
|
|
}
|
|
throw new IllegalStateException("Already resumed".toString());
|
|
}
|
|
} while (!_decisionAndIndex$FU.compareAndSet(this, i, 1073741824 + (536870911 & i)));
|
|
return true;
|
|
}
|
|
|
|
public final Object getResult() {
|
|
Job job;
|
|
boolean isReusable = isReusable();
|
|
if (trySuspend()) {
|
|
if (getParentHandle() == null) {
|
|
installParentHandle();
|
|
}
|
|
if (isReusable) {
|
|
releaseClaimedReusableContinuation$kotlinx_coroutines_core();
|
|
}
|
|
return IntrinsicsKt.getCOROUTINE_SUSPENDED();
|
|
}
|
|
if (isReusable) {
|
|
releaseClaimedReusableContinuation$kotlinx_coroutines_core();
|
|
}
|
|
Object state$kotlinx_coroutines_core = getState$kotlinx_coroutines_core();
|
|
if (!(state$kotlinx_coroutines_core instanceof CompletedExceptionally)) {
|
|
if (DispatchedTaskKt.isCancellableMode(this.resumeMode) && (job = (Job) get$context().get(Job.INSTANCE)) != null && !job.isActive()) {
|
|
CancellationException cancellationException = job.getCancellationException();
|
|
cancelCompletedResult$kotlinx_coroutines_core(state$kotlinx_coroutines_core, cancellationException);
|
|
if (!DebugKt.getRECOVER_STACK_TRACES()) {
|
|
throw cancellationException;
|
|
}
|
|
CancellableContinuationImpl<T> cancellableContinuationImpl = this;
|
|
if (cancellableContinuationImpl instanceof CoroutineStackFrame) {
|
|
throw StackTraceRecoveryKt.recoverFromStackFrame(cancellationException, cancellableContinuationImpl);
|
|
}
|
|
throw cancellationException;
|
|
}
|
|
return getSuccessfulResult$kotlinx_coroutines_core(state$kotlinx_coroutines_core);
|
|
}
|
|
Throwable th = ((CompletedExceptionally) state$kotlinx_coroutines_core).cause;
|
|
if (!DebugKt.getRECOVER_STACK_TRACES()) {
|
|
throw th;
|
|
}
|
|
CancellableContinuationImpl<T> cancellableContinuationImpl2 = this;
|
|
if (cancellableContinuationImpl2 instanceof CoroutineStackFrame) {
|
|
throw StackTraceRecoveryKt.recoverFromStackFrame(th, cancellableContinuationImpl2);
|
|
}
|
|
throw th;
|
|
}
|
|
|
|
private final DisposableHandle installParentHandle() {
|
|
Job job = (Job) get$context().get(Job.INSTANCE);
|
|
if (job == null) {
|
|
return null;
|
|
}
|
|
DisposableHandle invokeOnCompletion$default = Job.DefaultImpls.invokeOnCompletion$default(job, true, false, new ChildContinuation(this), 2, null);
|
|
_parentHandle$FU.compareAndSet(this, null, invokeOnCompletion$default);
|
|
return invokeOnCompletion$default;
|
|
}
|
|
|
|
public final void releaseClaimedReusableContinuation$kotlinx_coroutines_core() {
|
|
Throwable tryReleaseClaimedContinuation;
|
|
Continuation<T> continuation = this.delegate;
|
|
DispatchedContinuation dispatchedContinuation = continuation instanceof DispatchedContinuation ? (DispatchedContinuation) continuation : null;
|
|
if (dispatchedContinuation == null || (tryReleaseClaimedContinuation = dispatchedContinuation.tryReleaseClaimedContinuation(this)) == null) {
|
|
return;
|
|
}
|
|
detachChild$kotlinx_coroutines_core();
|
|
cancel(tryReleaseClaimedContinuation);
|
|
}
|
|
|
|
@Override // kotlin.coroutines.Continuation
|
|
public void resumeWith(Object result) {
|
|
resumeImpl$default(this, CompletionStateKt.toState(result, this), this.resumeMode, null, 4, null);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public void resume(T value, Function1<? super Throwable, Unit> onCancellation) {
|
|
resumeImpl(value, this.resumeMode, onCancellation);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.Waiter
|
|
public void invokeOnCancellation(Segment<?> segment, int index) {
|
|
int i;
|
|
AtomicIntegerFieldUpdater atomicIntegerFieldUpdater = _decisionAndIndex$FU;
|
|
do {
|
|
i = atomicIntegerFieldUpdater.get(this);
|
|
if ((i & 536870911) != 536870911) {
|
|
throw new IllegalStateException("invokeOnCancellation should be called at most once".toString());
|
|
}
|
|
} while (!atomicIntegerFieldUpdater.compareAndSet(this, i, ((i >> 29) << 29) + index));
|
|
invokeOnCancellationImpl(segment);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public void invokeOnCancellation(Function1<? super Throwable, Unit> handler) {
|
|
invokeOnCancellationImpl(makeCancelHandler(handler));
|
|
}
|
|
|
|
private final void invokeOnCancellationImpl(Object handler) {
|
|
if (DebugKt.getASSERTIONS_ENABLED() && !(handler instanceof CancelHandler) && !(handler instanceof Segment)) {
|
|
throw new AssertionError();
|
|
}
|
|
AtomicReferenceFieldUpdater atomicReferenceFieldUpdater = _state$FU;
|
|
while (true) {
|
|
Object obj = atomicReferenceFieldUpdater.get(this);
|
|
if (obj instanceof Active) {
|
|
if (_state$FU.compareAndSet(this, obj, handler)) {
|
|
return;
|
|
}
|
|
} else if ((obj instanceof CancelHandler) || (obj instanceof Segment)) {
|
|
multipleHandlersError(handler, obj);
|
|
} else {
|
|
boolean z = obj instanceof CompletedExceptionally;
|
|
if (z) {
|
|
CompletedExceptionally completedExceptionally = (CompletedExceptionally) obj;
|
|
if (!completedExceptionally.makeHandled()) {
|
|
multipleHandlersError(handler, obj);
|
|
}
|
|
if (obj instanceof CancelledContinuation) {
|
|
if (!z) {
|
|
completedExceptionally = null;
|
|
}
|
|
Throwable th = completedExceptionally != null ? completedExceptionally.cause : null;
|
|
if (handler instanceof CancelHandler) {
|
|
callCancelHandler((CancelHandler) handler, th);
|
|
return;
|
|
} else {
|
|
Intrinsics.checkNotNull(handler, "null cannot be cast to non-null type kotlinx.coroutines.internal.Segment<*>");
|
|
callSegmentOnCancellation((Segment) handler, th);
|
|
return;
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
if (obj instanceof CompletedContinuation) {
|
|
CompletedContinuation completedContinuation = (CompletedContinuation) obj;
|
|
if (completedContinuation.cancelHandler != null) {
|
|
multipleHandlersError(handler, obj);
|
|
}
|
|
if (handler instanceof Segment) {
|
|
return;
|
|
}
|
|
Intrinsics.checkNotNull(handler, "null cannot be cast to non-null type kotlinx.coroutines.CancelHandler");
|
|
CancelHandler cancelHandler = (CancelHandler) handler;
|
|
if (completedContinuation.getCancelled()) {
|
|
callCancelHandler(cancelHandler, completedContinuation.cancelCause);
|
|
return;
|
|
} else {
|
|
if (_state$FU.compareAndSet(this, obj, CompletedContinuation.copy$default(completedContinuation, null, cancelHandler, null, null, null, 29, null))) {
|
|
return;
|
|
}
|
|
}
|
|
} else {
|
|
if (handler instanceof Segment) {
|
|
return;
|
|
}
|
|
Intrinsics.checkNotNull(handler, "null cannot be cast to non-null type kotlinx.coroutines.CancelHandler");
|
|
if (_state$FU.compareAndSet(this, obj, new CompletedContinuation(obj, (CancelHandler) handler, null, null, null, 28, null))) {
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private final void multipleHandlersError(Object handler, Object state) {
|
|
throw new IllegalStateException(("It's prohibited to register multiple handlers, tried to register " + handler + ", already has " + state).toString());
|
|
}
|
|
|
|
private final CancelHandler makeCancelHandler(Function1<? super Throwable, Unit> handler) {
|
|
return handler instanceof CancelHandler ? (CancelHandler) handler : new InvokeOnCancel(handler);
|
|
}
|
|
|
|
private final void dispatchResume(int mode) {
|
|
if (tryResume()) {
|
|
return;
|
|
}
|
|
DispatchedTaskKt.dispatch(this, mode);
|
|
}
|
|
|
|
private final Object resumedState(NotCompleted state, Object proposedUpdate, int resumeMode, Function1<? super Throwable, Unit> onCancellation, Object idempotent) {
|
|
if (proposedUpdate instanceof CompletedExceptionally) {
|
|
if (DebugKt.getASSERTIONS_ENABLED() && idempotent != null) {
|
|
throw new AssertionError();
|
|
}
|
|
if (!DebugKt.getASSERTIONS_ENABLED() || onCancellation == null) {
|
|
return proposedUpdate;
|
|
}
|
|
throw new AssertionError();
|
|
}
|
|
if (!DispatchedTaskKt.isCancellableMode(resumeMode) && idempotent == null) {
|
|
return proposedUpdate;
|
|
}
|
|
if (onCancellation == null && !(state instanceof CancelHandler) && idempotent == null) {
|
|
return proposedUpdate;
|
|
}
|
|
return new CompletedContinuation(proposedUpdate, state instanceof CancelHandler ? (CancelHandler) state : null, onCancellation, idempotent, null, 16, null);
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
static /* synthetic */ void resumeImpl$default(CancellableContinuationImpl cancellableContinuationImpl, Object obj, int i, Function1 function1, int i2, Object obj2) {
|
|
if (obj2 != null) {
|
|
throw new UnsupportedOperationException("Super calls with default arguments not supported in this target, function: resumeImpl");
|
|
}
|
|
if ((i2 & 4) != 0) {
|
|
function1 = null;
|
|
}
|
|
cancellableContinuationImpl.resumeImpl(obj, i, function1);
|
|
}
|
|
|
|
private final void resumeImpl(Object proposedUpdate, int resumeMode, Function1<? super Throwable, Unit> onCancellation) {
|
|
Object obj;
|
|
AtomicReferenceFieldUpdater atomicReferenceFieldUpdater = _state$FU;
|
|
do {
|
|
obj = atomicReferenceFieldUpdater.get(this);
|
|
if (obj instanceof NotCompleted) {
|
|
} else {
|
|
if (obj instanceof CancelledContinuation) {
|
|
CancelledContinuation cancelledContinuation = (CancelledContinuation) obj;
|
|
if (cancelledContinuation.makeResumed()) {
|
|
if (onCancellation != null) {
|
|
callOnCancellation(onCancellation, cancelledContinuation.cause);
|
|
return;
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
alreadyResumedError(proposedUpdate);
|
|
throw new KotlinNothingValueException();
|
|
}
|
|
} while (!_state$FU.compareAndSet(this, obj, resumedState((NotCompleted) obj, proposedUpdate, resumeMode, onCancellation, null)));
|
|
detachChildIfNonResuable();
|
|
dispatchResume(resumeMode);
|
|
}
|
|
|
|
private final Symbol tryResumeImpl(Object proposedUpdate, Object idempotent, Function1<? super Throwable, Unit> onCancellation) {
|
|
Object obj;
|
|
AtomicReferenceFieldUpdater atomicReferenceFieldUpdater = _state$FU;
|
|
do {
|
|
obj = atomicReferenceFieldUpdater.get(this);
|
|
if (obj instanceof NotCompleted) {
|
|
} else {
|
|
if (!(obj instanceof CompletedContinuation) || idempotent == null) {
|
|
return null;
|
|
}
|
|
CompletedContinuation completedContinuation = (CompletedContinuation) obj;
|
|
if (completedContinuation.idempotentResume != idempotent) {
|
|
return null;
|
|
}
|
|
if (!DebugKt.getASSERTIONS_ENABLED() || Intrinsics.areEqual(completedContinuation.result, proposedUpdate)) {
|
|
return CancellableContinuationImplKt.RESUME_TOKEN;
|
|
}
|
|
throw new AssertionError();
|
|
}
|
|
} while (!_state$FU.compareAndSet(this, obj, resumedState((NotCompleted) obj, proposedUpdate, this.resumeMode, onCancellation, idempotent)));
|
|
detachChildIfNonResuable();
|
|
return CancellableContinuationImplKt.RESUME_TOKEN;
|
|
}
|
|
|
|
private final Void alreadyResumedError(Object proposedUpdate) {
|
|
throw new IllegalStateException(("Already resumed, but proposed with update " + proposedUpdate).toString());
|
|
}
|
|
|
|
private final void detachChildIfNonResuable() {
|
|
if (isReusable()) {
|
|
return;
|
|
}
|
|
detachChild$kotlinx_coroutines_core();
|
|
}
|
|
|
|
public final void detachChild$kotlinx_coroutines_core() {
|
|
DisposableHandle parentHandle = getParentHandle();
|
|
if (parentHandle == null) {
|
|
return;
|
|
}
|
|
parentHandle.dispose();
|
|
_parentHandle$FU.set(this, NonDisposableHandle.INSTANCE);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public Object tryResume(T value, Object idempotent) {
|
|
return tryResumeImpl(value, idempotent, null);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public Object tryResume(T value, Object idempotent, Function1<? super Throwable, Unit> onCancellation) {
|
|
return tryResumeImpl(value, idempotent, onCancellation);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public Object tryResumeWithException(Throwable exception) {
|
|
return tryResumeImpl(new CompletedExceptionally(exception, false, 2, null), null, null);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public void completeResume(Object token) {
|
|
if (DebugKt.getASSERTIONS_ENABLED() && token != CancellableContinuationImplKt.RESUME_TOKEN) {
|
|
throw new AssertionError();
|
|
}
|
|
dispatchResume(this.resumeMode);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public void resumeUndispatched(CoroutineDispatcher coroutineDispatcher, T t) {
|
|
Continuation<T> continuation = this.delegate;
|
|
DispatchedContinuation dispatchedContinuation = continuation instanceof DispatchedContinuation ? (DispatchedContinuation) continuation : null;
|
|
resumeImpl$default(this, t, (dispatchedContinuation != null ? dispatchedContinuation.dispatcher : null) == coroutineDispatcher ? 4 : this.resumeMode, null, 4, null);
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.CancellableContinuation
|
|
public void resumeUndispatchedWithException(CoroutineDispatcher coroutineDispatcher, Throwable th) {
|
|
Continuation<T> continuation = this.delegate;
|
|
DispatchedContinuation dispatchedContinuation = continuation instanceof DispatchedContinuation ? (DispatchedContinuation) continuation : null;
|
|
resumeImpl$default(this, new CompletedExceptionally(th, false, 2, null), (dispatchedContinuation != null ? dispatchedContinuation.dispatcher : null) == coroutineDispatcher ? 4 : this.resumeMode, null, 4, null);
|
|
}
|
|
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
@Override // kotlinx.coroutines.DispatchedTask
|
|
public <T> T getSuccessfulResult$kotlinx_coroutines_core(Object state) {
|
|
return state instanceof CompletedContinuation ? (T) ((CompletedContinuation) state).result : state;
|
|
}
|
|
|
|
@Override // kotlinx.coroutines.DispatchedTask
|
|
public Throwable getExceptionalResult$kotlinx_coroutines_core(Object state) {
|
|
Throwable exceptionalResult$kotlinx_coroutines_core = super.getExceptionalResult$kotlinx_coroutines_core(state);
|
|
if (exceptionalResult$kotlinx_coroutines_core == null) {
|
|
return null;
|
|
}
|
|
Continuation<T> continuation = this.delegate;
|
|
return (DebugKt.getRECOVER_STACK_TRACES() && (continuation instanceof CoroutineStackFrame)) ? StackTraceRecoveryKt.recoverFromStackFrame(exceptionalResult$kotlinx_coroutines_core, (CoroutineStackFrame) continuation) : exceptionalResult$kotlinx_coroutines_core;
|
|
}
|
|
|
|
public String toString() {
|
|
return nameString() + '(' + DebugStringsKt.toDebugString(this.delegate) + "){" + getStateDebugRepresentation() + "}@" + DebugStringsKt.getHexAddress(this);
|
|
}
|
|
|
|
private final void callCancelHandler(Function1<? super Throwable, Unit> handler, Throwable cause) {
|
|
try {
|
|
handler.invoke(cause);
|
|
} catch (Throwable th) {
|
|
CoroutineExceptionHandlerKt.handleCoroutineException(get$context(), new CompletionHandlerException("Exception in invokeOnCancellation handler for " + this, th));
|
|
}
|
|
}
|
|
}
|