final class org.apache.dubbo.common.timer.HashedWheelTimer$Worker extends java.lang.Object implements java.lang.Runnable
{
private final java.util.Set unprocessedTimeouts;
private long tick;
final org.apache.dubbo.common.timer.HashedWheelTimer this$0;
private void <init>(org.apache.dubbo.common.timer.HashedWheelTimer)
{
java.util.HashSet v;
org.apache.dubbo.common.timer.HashedWheelTimer v;
org.apache.dubbo.common.timer.HashedWheelTimer$Worker v;
v := @this: org.apache.dubbo.common.timer.HashedWheelTimer$Worker;
v := @parameter: org.apache.dubbo.common.timer.HashedWheelTimer;
v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0> = v;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: java.util.Set unprocessedTimeouts> = v;
return;
}
public void run()
{
org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket[] v, v;
byte v, v;
org.apache.dubbo.common.timer.HashedWheelTimer$Worker v;
boolean v;
java.util.Set v, v;
org.apache.dubbo.common.timer.HashedWheelTimer v, v, v, v, v, v, v, v, v;
java.util.concurrent.CountDownLatch v;
java.util.Queue v;
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
long v, v, v, v, v, v, v;
int v, v, v, v;
org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket v, v;
java.lang.Object v;
v := @this: org.apache.dubbo.common.timer.HashedWheelTimer$Worker;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = staticinvoke <java.lang.System: long nanoTime()>();
v.<org.apache.dubbo.common.timer.HashedWheelTimer: long startTime> = v;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: long startTime>;
v = v cmp 0L;
if v != 0 goto label;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v.<org.apache.dubbo.common.timer.HashedWheelTimer: long startTime> = 1L;
label:
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: java.util.concurrent.CountDownLatch startTimeInitialized>;
virtualinvoke v.<java.util.concurrent.CountDownLatch: void countDown()>();
label:
v = specialinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long waitForNextTick()>();
v = v cmp 0L;
if v <= 0 goto label;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long tick>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: int mask>;
v = v & v;
specialinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: void processCancelledTasks()>();
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket[] wheel>;
v = v[v];
specialinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: void transferTimeoutsToBuckets()>();
virtualinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket: void expireTimeouts(long)>(v);
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long tick>;
v = v + 1L;
v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long tick> = v;
label:
v = <org.apache.dubbo.common.timer.HashedWheelTimer: java.util.concurrent.atomic.AtomicIntegerFieldUpdater WORKER_STATE_UPDATER>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int get(java.lang.Object)>(v);
if v == 1 goto label;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket[] wheel>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: java.util.Set unprocessedTimeouts>;
virtualinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket: void clearTimeouts(java.util.Set)>(v);
v = v + 1;
goto label;
label:
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: java.util.Queue timeouts>;
v = interfaceinvoke v.<java.util.Queue: java.lang.Object poll()>();
if v == null goto label;
v = virtualinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelTimeout: boolean isCancelled()>();
if v != 0 goto label;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: java.util.Set unprocessedTimeouts>;
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
goto label;
label:
specialinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: void processCancelledTasks()>();
return;
}
private void transferTimeoutsToBuckets()
{
org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket[] v, v;
long v, v, v, v, v, v, v, v, v;
int v, v, v, v;
org.apache.dubbo.common.timer.HashedWheelTimer$Worker v;
org.apache.dubbo.common.timer.HashedWheelTimer v, v, v, v, v;
org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket v;
java.lang.Object v;
java.util.Queue v;
v := @this: org.apache.dubbo.common.timer.HashedWheelTimer$Worker;
v = 0;
label:
if v >= 100000 goto label;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: java.util.Queue timeouts>;
v = interfaceinvoke v.<java.util.Queue: java.lang.Object poll()>();
if v == null goto label;
v = virtualinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelTimeout: int state()>();
if v == 1 goto label;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelTimeout: long deadline>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: long tickDuration>;
v = v / v;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long tick>;
v = v - v;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket[] wheel>;
v = lengthof v;
v = v / v;
v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelTimeout: long remainingRounds> = v;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long tick>;
v = staticinvoke <java.lang.Math: long max(long,long)>(v, v);
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: int mask>;
v = v & v;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket[] wheel>;
v = v[v];
virtualinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelBucket: void addTimeout(org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelTimeout)>(v);
label:
v = v + 1;
goto label;
label:
return;
}
private void processCancelledTasks()
{
java.lang.Throwable v;
org.apache.dubbo.common.logger.Logger v, v;
org.apache.dubbo.common.timer.HashedWheelTimer v;
java.lang.Object v;
java.util.Queue v;
org.apache.dubbo.common.timer.HashedWheelTimer$Worker v;
boolean v;
v := @this: org.apache.dubbo.common.timer.HashedWheelTimer$Worker;
label:
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: java.util.Queue cancelledTimeouts>;
v = interfaceinvoke v.<java.util.Queue: java.lang.Object poll()>();
if v == null goto label;
label:
virtualinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer$HashedWheelTimeout: void remove()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.dubbo.common.timer.HashedWheelTimer: org.apache.dubbo.common.logger.Logger logger>;
v = interfaceinvoke v.<org.apache.dubbo.common.logger.Logger: boolean isWarnEnabled()>();
if v == 0 goto label;
v = <org.apache.dubbo.common.timer.HashedWheelTimer: org.apache.dubbo.common.logger.Logger logger>;
interfaceinvoke v.<org.apache.dubbo.common.logger.Logger: void warn(java.lang.String,java.lang.Throwable)>("An exception was thrown while process a cancellation task", v);
goto label;
label:
return;
catch java.lang.Throwable from label to label with label;
}
private long waitForNextTick()
{
java.util.concurrent.atomic.AtomicIntegerFieldUpdater v;
long v, v, v, v, v, v, v, v, v, v, v;
byte v, v;
int v;
org.apache.dubbo.common.timer.HashedWheelTimer$Worker v;
boolean v;
org.apache.dubbo.common.timer.HashedWheelTimer v, v, v, v;
java.lang.InterruptedException v;
v := @this: org.apache.dubbo.common.timer.HashedWheelTimer$Worker;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: long tickDuration>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: long tick>;
v = v + 1L;
v = v * v;
label:
v = staticinvoke <java.lang.System: long nanoTime()>();
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer: long startTime>;
v = v - v;
v = v - v;
v = v + 999999L;
v = v / 1000000L;
v = v cmp 0L;
if v > 0 goto label;
v = v cmp -9223372036854775808L;
if v != 0 goto label;
return -9223372036854775807L;
label:
return v;
label:
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = specialinvoke v.<org.apache.dubbo.common.timer.HashedWheelTimer: boolean isWindows()>();
if v == 0 goto label;
v = v / 10L;
v = v * 10L;
label:
staticinvoke <java.lang.Thread: void sleep(long)>(v);
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.dubbo.common.timer.HashedWheelTimer: java.util.concurrent.atomic.AtomicIntegerFieldUpdater WORKER_STATE_UPDATER>;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: org.apache.dubbo.common.timer.HashedWheelTimer this$0>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicIntegerFieldUpdater: int get(java.lang.Object)>(v);
if v != 2 goto label;
return -9223372036854775808L;
catch java.lang.InterruptedException from label to label with label;
}
java.util.Set unprocessedTimeouts()
{
java.util.Set v, v;
org.apache.dubbo.common.timer.HashedWheelTimer$Worker v;
v := @this: org.apache.dubbo.common.timer.HashedWheelTimer$Worker;
v = v.<org.apache.dubbo.common.timer.HashedWheelTimer$Worker: java.util.Set unprocessedTimeouts>;
v = staticinvoke <java.util.Collections: java.util.Set unmodifiableSet(java.util.Set)>(v);
return v;
}
}