abstract class com.google.common.util.concurrent.InterruptibleTask extends java.util.concurrent.atomic.AtomicReference implements java.lang.Runnable
{
private static final java.lang.Runnable DONE;
private static final java.lang.Runnable PARKED;
private static final int MAX_BUSY_WAIT_SPINS;
void <init>()
{
com.google.common.util.concurrent.InterruptibleTask v;
v := @this: com.google.common.util.concurrent.InterruptibleTask;
specialinvoke v.<java.util.concurrent.atomic.AtomicReference: void <init>()>();
return;
}
public final void run()
{
java.lang.Throwable v, v;
java.lang.Runnable v, v, v;
com.google.common.util.concurrent.InterruptibleTask v;
java.lang.Thread v;
boolean v, v, v, v, v, v, v;
java.lang.Object v, v, v;
v := @this: com.google.common.util.concurrent.InterruptibleTask;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean compareAndSet(java.lang.Object,java.lang.Object)>(null, v);
if v != 0 goto label;
return;
label:
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean isDone()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
v = null;
label:
if v == 0 goto label;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object runInterruptibly()>();
label:
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE>;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean compareAndSet(java.lang.Object,java.lang.Object)>(v, v);
if v != 0 goto label;
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask: void waitForInterrupt(java.lang.Thread)>(v);
label:
if v == 0 goto label;
v = staticinvoke <com.google.common.util.concurrent.NullnessCasts: java.lang.Object uncheckedCastNullableTToT(java.lang.Object)>(v);
virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: void afterRanInterruptiblySuccess(java.lang.Object)>(v);
goto label;
label:
v := @caughtexception;
label:
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE>;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean compareAndSet(java.lang.Object,java.lang.Object)>(v, v);
if v != 0 goto label;
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask: void waitForInterrupt(java.lang.Thread)>(v);
label:
if v == 0 goto label;
virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: void afterRanInterruptiblyFailure(java.lang.Throwable)>(v);
goto label;
label:
v := @caughtexception;
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE>;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean compareAndSet(java.lang.Object,java.lang.Object)>(v, v);
if v != 0 goto label;
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask: void waitForInterrupt(java.lang.Thread)>(v);
label:
if v == 0 goto label;
v = staticinvoke <com.google.common.util.concurrent.NullnessCasts: java.lang.Object uncheckedCastNullableTToT(java.lang.Object)>(v);
virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: void afterRanInterruptiblySuccess(java.lang.Object)>(v);
label:
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private void waitForInterrupt(java.lang.Thread)
{
java.lang.Runnable v, v, v, v;
com.google.common.util.concurrent.InterruptibleTask v;
java.lang.Thread v;
int v;
java.lang.Object v;
boolean v, v, v, v, v, v;
v := @this: com.google.common.util.concurrent.InterruptibleTask;
v := @parameter: java.lang.Thread;
v = 0;
v = 0;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object get()>();
label:
v = v instanceof com.google.common.util.concurrent.InterruptibleTask$Blocker;
if v != 0 goto label;
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable PARKED>;
if v != v goto label;
label:
v = v + 1;
if v <= 1000 goto label;
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable PARKED>;
if v == v goto label;
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable PARKED>;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean compareAndSet(java.lang.Object,java.lang.Object)>(v, v);
if v == 0 goto label;
label:
v = staticinvoke <java.lang.Thread: boolean interrupted()>();
if v != 0 goto label;
if v == 0 goto label;
label:
v = 1;
goto label;
label:
v = 0;
label:
v = v;
staticinvoke <java.util.concurrent.locks.LockSupport: void park(java.lang.Object)>(v);
goto label;
label:
staticinvoke <java.lang.Thread: void yield()>();
label:
virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object get()>();
goto label;
label:
if v == 0 goto label;
virtualinvoke v.<java.lang.Thread: void interrupt()>();
label:
return;
}
abstract boolean isDone();
abstract java.lang.Object runInterruptibly() throws java.lang.Exception;
abstract void afterRanInterruptiblySuccess(java.lang.Object);
abstract void afterRanInterruptiblyFailure(java.lang.Throwable);
final void interruptTask()
{
java.lang.Throwable v;
java.lang.Runnable v, v, v, v, v;
com.google.common.util.concurrent.InterruptibleTask v;
java.lang.Thread v;
java.lang.Object v, v, v;
com.google.common.util.concurrent.InterruptibleTask$Blocker v;
boolean v, v;
v := @this: com.google.common.util.concurrent.InterruptibleTask;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object get()>();
v = v instanceof java.lang.Thread;
if v == 0 goto label;
v = new com.google.common.util.concurrent.InterruptibleTask$Blocker;
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask$Blocker: void <init>(com.google.common.util.concurrent.InterruptibleTask)>(v);
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask$Blocker: void setOwner(java.lang.Thread)>(v);
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: boolean compareAndSet(java.lang.Object,java.lang.Object)>(v, v);
if v == 0 goto label;
label:
virtualinvoke v.<java.lang.Thread: void interrupt()>();
label:
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE>;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object getAndSet(java.lang.Object)>(v);
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable PARKED>;
if v != v goto label;
staticinvoke <java.util.concurrent.locks.LockSupport: void unpark(java.lang.Thread)>(v);
goto label;
label:
v := @caughtexception;
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE>;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object getAndSet(java.lang.Object)>(v);
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable PARKED>;
if v != v goto label;
staticinvoke <java.util.concurrent.locks.LockSupport: void unpark(java.lang.Thread)>(v);
label:
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
public final java.lang.String toString()
{
java.lang.Runnable v, v;
com.google.common.util.concurrent.InterruptibleTask v;
int v, v, v, v, v, v;
java.lang.String v, v, v, v, v, v, v;
boolean v, v;
java.lang.Object v;
java.lang.StringBuilder v, v;
v := @this: com.google.common.util.concurrent.InterruptibleTask;
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.Object get()>();
v = <com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE>;
if v != v goto label;
v = "running=[DONE]";
goto label;
label:
v = v instanceof com.google.common.util.concurrent.InterruptibleTask$Blocker;
if v == 0 goto label;
v = "running=[INTERRUPTED]";
goto label;
label:
v = v instanceof java.lang.Thread;
if v == 0 goto label;
v = virtualinvoke v.<java.lang.Thread: java.lang.String getName()>();
v = staticinvoke <java.lang.String: java.lang.String valueOf(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.String: int length()>();
v = 21 + v;
specialinvoke v.<java.lang.StringBuilder: void <init>(int)>(v);
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("running=[RUNNING ON \u]");
goto label;
label:
v = "running=[NOT STARTED YET]";
label:
v = virtualinvoke v.<com.google.common.util.concurrent.InterruptibleTask: java.lang.String toPendingString()>();
v = staticinvoke <java.lang.String: java.lang.String valueOf(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.String: int length()>();
v = 2 + v;
v = staticinvoke <java.lang.String: java.lang.String valueOf(java.lang.Object)>(v);
v = virtualinvoke v.<java.lang.String: int length()>();
v = v + v;
specialinvoke v.<java.lang.StringBuilder: void <init>(int)>(v);
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("\u, \u0001");
return v;
}
abstract java.lang.String toPendingString();
static void <clinit>()
{
com.google.common.util.concurrent.InterruptibleTask$DoNothingRunnable v, v;
v = new com.google.common.util.concurrent.InterruptibleTask$DoNothingRunnable;
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask$DoNothingRunnable: void <init>()>();
<com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable DONE> = v;
v = new com.google.common.util.concurrent.InterruptibleTask$DoNothingRunnable;
specialinvoke v.<com.google.common.util.concurrent.InterruptibleTask$DoNothingRunnable: void <init>()>();
<com.google.common.util.concurrent.InterruptibleTask: java.lang.Runnable PARKED> = v;
return;
}
}