class org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner extends java.lang.Object implements java.lang.Runnable
{
private final org.glassfish.hk.api.ServiceLocator locator;
private final org.glassfish.hk.runlevel.internal.AsyncRunLevelContext asyncContext;
private final java.lang.Object queueLock;
private final java.util.List queue;
private final org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent;
private final java.lang.Object parentLock;
private final int maxThreads;
private org.glassfish.hk.api.ServiceHandle wouldHaveBlocked;
private final java.util.HashSet alreadyTried;
private void <init>(org.glassfish.hk.api.ServiceLocator, org.glassfish.hk.runlevel.internal.AsyncRunLevelContext, java.lang.Object, java.util.List, org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel, java.lang.Object, int)
{
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel v;
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner v;
java.util.HashSet v;
java.util.List v;
org.glassfish.hk.runlevel.internal.AsyncRunLevelContext v;
int v;
java.lang.Object v, v;
org.glassfish.hk.api.ServiceLocator v;
v := @this: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner;
v := @parameter: org.glassfish.hk.api.ServiceLocator;
v := @parameter: org.glassfish.hk.runlevel.internal.AsyncRunLevelContext;
v := @parameter: java.lang.Object;
v := @parameter: java.util.List;
v := @parameter: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel;
v := @parameter: java.lang.Object;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.HashSet alreadyTried> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceLocator locator> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.AsyncRunLevelContext asyncContext> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.lang.Object queueLock> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.lang.Object parentLock> = v;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: int maxThreads> = v;
return;
}
public void run()
{
org.glassfish.hk.api.ActiveDescriptor v, v;
boolean v, v, v, v;
java.util.List v, v, v, v, v, v, v, v, v;
java.lang.Throwable v;
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel v, v, v;
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner v;
java.util.HashSet v, v;
int v, v, v, v, v, v, v, v;
org.glassfish.hk.api.ServiceHandle v, v, v, v;
java.lang.Object v, v, v;
v := @this: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner;
v = null;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.lang.Object queueLock>;
entermonitor v;
label:
if v == null goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void jobFinished(org.glassfish.hk.api.ServiceHandle)>(v);
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceHandle wouldHaveBlocked>;
if v == null goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.HashSet alreadyTried>;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceHandle wouldHaveBlocked>;
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: org.glassfish.hk.api.ActiveDescriptor getActiveDescriptor()>();
virtualinvoke v.<java.util.HashSet: boolean add(java.lang.Object)>(v);
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = interfaceinvoke v.<java.util.List: int size()>();
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceHandle wouldHaveBlocked>;
interfaceinvoke v.<java.util.List: void add(int,java.lang.Object)>(v, v);
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceHandle wouldHaveBlocked> = null;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = interfaceinvoke v.<java.util.List: boolean isEmpty()>();
if v == 0 goto label;
exitmonitor v;
label:
return;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: int maxThreads>;
if v > 0 goto label;
v = 1;
goto label;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: int maxThreads>;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
v = specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: int getJobsRunning()>();
v = v - v;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = interfaceinvoke v.<java.util.List: int size()>();
if v > v goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
label:
if v == 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = interfaceinvoke v.<java.util.List: java.lang.Object remove(int)>(0);
goto label;
label:
v = null;
v = 0;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = interfaceinvoke v.<java.util.List: int size()>();
if v >= v goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
v = interfaceinvoke v.<java.util.List: java.lang.Object get(int)>(v);
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: org.glassfish.hk.api.ActiveDescriptor getActiveDescriptor()>();
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.HashSet alreadyTried>;
v = virtualinvoke v.<java.util.HashSet: boolean contains(java.lang.Object)>(v);
if v != 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
interfaceinvoke v.<java.util.List: java.lang.Object remove(int)>(v);
goto label;
label:
v = v + 1;
goto label;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.util.List queue>;
interfaceinvoke v.<java.util.List: java.lang.Object remove(int)>(0);
v = 1;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void jobRunning(org.glassfish.hk.api.ServiceHandle)>(v);
v = v;
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: void oneJob(org.glassfish.hk.api.ServiceHandle,boolean)>(v, v);
goto label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private boolean isWouldBlockRightNow(java.util.HashSet, org.glassfish.hk.api.ActiveDescriptor)
{
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner v;
java.util.HashSet v;
org.glassfish.hk.api.ActiveDescriptor v, v;
java.lang.String v, v;
boolean v, v, v, v, v, v, v;
java.util.Iterator v;
java.util.List v;
org.glassfish.hk.api.MultiException v;
org.glassfish.hk.runlevel.internal.AsyncRunLevelContext v, v;
java.lang.Class v;
java.lang.Object v;
org.glassfish.hk.api.ServiceLocator v, v;
v := @this: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner;
v := @parameter: java.util.HashSet;
v := @parameter: org.glassfish.hk.api.ActiveDescriptor;
if v != null goto label;
return 0;
label:
v = virtualinvoke v.<java.util.HashSet: boolean contains(java.lang.Object)>(v);
if v == 0 goto label;
return 0;
label:
virtualinvoke v.<java.util.HashSet: boolean add(java.lang.Object)>(v);
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.AsyncRunLevelContext asyncContext>;
v = virtualinvoke v.<org.glassfish.hk.runlevel.internal.AsyncRunLevelContext: boolean wouldBlockRightNow(org.glassfish.hk.api.ActiveDescriptor)>(v);
if v == 0 goto label;
return 1;
label:
v = interfaceinvoke v.<org.glassfish.hk.api.ActiveDescriptor: boolean isReified()>();
if v != 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceLocator locator>;
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceLocator: org.glassfish.hk.api.ActiveDescriptor reifyDescriptor(org.glassfish.hk.api.Descriptor)>(v);
label:
v = interfaceinvoke v.<org.glassfish.hk.api.ActiveDescriptor: java.util.List getInjectees()>();
v = interfaceinvoke v.<java.util.List: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceLocator locator>;
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceLocator: org.glassfish.hk.api.ActiveDescriptor getInjecteeDescriptor(org.glassfish.hk.api.Injectee)>(v);
label:
goto label;
label:
v := @caughtexception;
goto label;
label:
if v == null goto label;
v = interfaceinvoke v.<org.glassfish.hk.api.ActiveDescriptor: java.lang.String getScope()>();
v = class "Lorg/glassfish/hk2/runlevel/RunLevel;";
v = virtualinvoke v.<java.lang.Class: java.lang.String getName()>();
v = virtualinvoke v.<java.lang.String: boolean equals(java.lang.Object)>(v);
if v == 0 goto label;
v = specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: boolean isWouldBlockRightNow(java.util.HashSet,org.glassfish.hk.api.ActiveDescriptor)>(v, v);
if v == 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.AsyncRunLevelContext asyncContext>;
v = virtualinvoke v.<org.glassfish.hk.runlevel.internal.AsyncRunLevelContext: boolean wouldBlockRightNow(org.glassfish.hk.api.ActiveDescriptor)>(v);
if v == 0 goto label;
return 1;
label:
return 1;
label:
return 0;
catch org.glassfish.hk.api.MultiException from label to label with label;
}
private void oneJob(org.glassfish.hk.api.ServiceHandle, boolean)
{
java.lang.Throwable v, v, v;
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel v, v, v, v, v, v, v, v;
org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner v;
java.util.HashSet v;
org.glassfish.hk.api.ActiveDescriptor v, v, v;
java.lang.Boolean v;
boolean v, v, v, v, v, v, v, v, v;
org.glassfish.hk.api.ServiceHandle v;
org.glassfish.hk.api.MultiException v, v;
java.lang.Object v;
v := @this: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner;
v := @parameter: org.glassfish.hk.api.ServiceHandle;
v := @parameter: boolean;
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = staticinvoke <java.lang.Boolean: java.lang.Boolean valueOf(boolean)>(v);
interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: void setServiceData(java.lang.Object)>(v);
v = 1;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: java.lang.Object parentLock>;
entermonitor v;
label:
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: boolean cancelled>;
if v != 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: org.glassfish.hk.api.MultiException accumulatedExceptions>;
if v != null goto label;
v = 1;
goto label;
label:
v = 0;
label:
v = v;
exitmonitor v;
label:
goto label;
label:
v := @caughtexception;
exitmonitor v;
throw v;
label:
if v != 0 goto label;
v = new java.util.HashSet;
specialinvoke v.<java.util.HashSet: void <init>()>();
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: org.glassfish.hk.api.ActiveDescriptor getActiveDescriptor()>();
v = specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: boolean isWouldBlockRightNow(java.util.HashSet,org.glassfish.hk.api.ActiveDescriptor)>(v, v);
if v == 0 goto label;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceHandle wouldHaveBlocked> = v;
v = 0;
v = 0;
label:
if v == 0 goto label;
interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: java.lang.Object getService()>();
label:
interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: void setServiceData(java.lang.Object)>(null);
if v == 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void jobComplete()>();
goto label;
label:
v := @caughtexception;
if v != 0 goto label;
v = staticinvoke <org.glassfish.hk.runlevel.internal.CurrentTaskFuture: boolean isWouldBlock(java.lang.Throwable)>(v);
if v == 0 goto label;
v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.api.ServiceHandle wouldHaveBlocked> = v;
v = 0;
goto label;
label:
v = staticinvoke <org.glassfish.hk.runlevel.internal.CurrentTaskFuture: boolean isWasCancelled(java.lang.Throwable)>(v);
if v != 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: org.glassfish.hk.api.ActiveDescriptor getActiveDescriptor()>();
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void fail(java.lang.Throwable,org.glassfish.hk.api.Descriptor)>(v, v);
label:
interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: void setServiceData(java.lang.Object)>(null);
if v == 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void jobComplete()>();
goto label;
label:
v := @caughtexception;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
v = interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: org.glassfish.hk.api.ActiveDescriptor getActiveDescriptor()>();
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void fail(java.lang.Throwable,org.glassfish.hk.api.Descriptor)>(v, v);
label:
interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: void setServiceData(java.lang.Object)>(null);
if v == 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void jobComplete()>();
goto label;
label:
v := @caughtexception;
interfaceinvoke v.<org.glassfish.hk.api.ServiceHandle: void setServiceData(java.lang.Object)>(null);
if v == 0 goto label;
v = v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$QueueRunner: org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel parent>;
specialinvoke v.<org.glassfish.hk.runlevel.internal.CurrentTaskFuture$UpOneLevel: void jobComplete()>();
label:
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
catch org.glassfish.hk.api.MultiException from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
}