public abstract class oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup extends oadd.io.netty.util.concurrent.AbstractEventExecutorGroup
{
private final oadd.io.netty.util.concurrent.EventExecutor[] children;
private final java.util.Set readonlyChildren;
private final java.util.concurrent.atomic.AtomicInteger terminatedChildren;
private final oadd.io.netty.util.concurrent.Promise terminationFuture;
private final oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser chooser;
protected transient void <init>(int, java.util.concurrent.ThreadFactory, java.lang.Object[])
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
java.lang.Object[] v;
int v;
oadd.io.netty.util.concurrent.ThreadPerTaskExecutor v;
java.util.concurrent.ThreadFactory v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v := @parameter: int;
v := @parameter: java.util.concurrent.ThreadFactory;
v := @parameter: java.lang.Object[];
if v != null goto label;
v = null;
goto label;
label:
v = new oadd.io.netty.util.concurrent.ThreadPerTaskExecutor;
specialinvoke v.<oadd.io.netty.util.concurrent.ThreadPerTaskExecutor: void <init>(java.util.concurrent.ThreadFactory)>(v);
label:
specialinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: void <init>(int,java.util.concurrent.Executor,java.lang.Object[])>(v, v, v);
return;
}
protected transient void <init>(int, java.util.concurrent.Executor, java.lang.Object[])
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
java.lang.Object[] v;
java.util.concurrent.Executor v;
oadd.io.netty.util.concurrent.DefaultEventExecutorChooserFactory v;
int v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v := @parameter: int;
v := @parameter: java.util.concurrent.Executor;
v := @parameter: java.lang.Object[];
v = <oadd.io.netty.util.concurrent.DefaultEventExecutorChooserFactory: oadd.io.netty.util.concurrent.DefaultEventExecutorChooserFactory INSTANCE>;
specialinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: void <init>(int,java.util.concurrent.Executor,oadd.io.netty.util.concurrent.EventExecutorChooserFactory,java.lang.Object[])>(v, v, v, v);
return;
}
protected transient void <init>(int, java.util.concurrent.Executor, oadd.io.netty.util.concurrent.EventExecutorChooserFactory, java.lang.Object[])
{
java.lang.IllegalStateException v;
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser v;
java.util.concurrent.atomic.AtomicInteger v;
java.lang.Thread v;
java.util.concurrent.ThreadFactory v;
boolean v;
java.util.Set v;
oadd.io.netty.util.concurrent.EventExecutorChooserFactory v;
java.lang.Exception v;
oadd.io.netty.util.concurrent.GlobalEventExecutor v;
java.lang.Throwable v;
java.lang.Object[] v;
oadd.io.netty.util.concurrent.Future v;
oadd.io.netty.util.concurrent.EventExecutor[] v, v, v, v, v, v, v, v;
oadd.io.netty.util.concurrent.DefaultPromise v;
int v, v, v, v, v, v, v;
oadd.io.netty.util.concurrent.ThreadPerTaskExecutor v;
java.util.LinkedHashSet v;
oadd.io.netty.util.concurrent.EventExecutor v, v, v, v;
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup$1 v;
java.util.concurrent.Executor v;
java.util.concurrent.TimeUnit v;
java.lang.InterruptedException v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v := @parameter: int;
v := @parameter: java.util.concurrent.Executor;
v := @parameter: oadd.io.netty.util.concurrent.EventExecutorChooserFactory;
v := @parameter: java.lang.Object[];
specialinvoke v.<oadd.io.netty.util.concurrent.AbstractEventExecutorGroup: void <init>()>();
v = new java.util.concurrent.atomic.AtomicInteger;
specialinvoke v.<java.util.concurrent.atomic.AtomicInteger: void <init>()>();
v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: java.util.concurrent.atomic.AtomicInteger terminatedChildren> = v;
v = new oadd.io.netty.util.concurrent.DefaultPromise;
v = <oadd.io.netty.util.concurrent.GlobalEventExecutor: oadd.io.netty.util.concurrent.GlobalEventExecutor INSTANCE>;
specialinvoke v.<oadd.io.netty.util.concurrent.DefaultPromise: void <init>(oadd.io.netty.util.concurrent.EventExecutor)>(v);
v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.Promise terminationFuture> = v;
staticinvoke <oadd.io.netty.util.internal.ObjectUtil: int checkPositive(int,java.lang.String)>(v, "nThreads");
if v != null goto label;
v = new oadd.io.netty.util.concurrent.ThreadPerTaskExecutor;
v = virtualinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: java.util.concurrent.ThreadFactory newDefaultThreadFactory()>();
specialinvoke v.<oadd.io.netty.util.concurrent.ThreadPerTaskExecutor: void <init>(java.util.concurrent.ThreadFactory)>(v);
v = v;
label:
v = newarray (oadd.io.netty.util.concurrent.EventExecutor)[v];
v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children> = v;
v = 0;
label:
if v >= v goto label;
label:
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = virtualinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor newChild(java.util.concurrent.Executor,java.lang.Object[])>(v, v);
v[v] = v;
label:
goto label;
label:
v := @caughtexception;
v = new java.lang.IllegalStateException;
specialinvoke v.<java.lang.IllegalStateException: void <init>(java.lang.String,java.lang.Throwable)>("failed to create a child event loop", v);
throw v;
label:
v := @caughtexception;
v = 0;
label:
if v >= v goto label;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = v[v];
interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: oadd.io.netty.util.concurrent.Future shutdownGracefully()>();
v = v + 1;
goto label;
label:
v = 0;
label:
if v >= v goto label;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = v[v];
label:
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: boolean isTerminated()>();
if v != 0 goto label;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit SECONDS>;
interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: boolean awaitTermination(long,java.util.concurrent.TimeUnit)>(2147483647L, v);
goto label;
label:
v := @caughtexception;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
virtualinvoke v.<java.lang.Thread: void interrupt()>();
goto label;
label:
v = v + 1;
goto label;
label:
throw v;
label:
v = v + 1;
goto label;
label:
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutorChooserFactory: oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser newChooser(oadd.io.netty.util.concurrent.EventExecutor[])>(v);
v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser chooser> = v;
v = new oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup$1;
specialinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup$1: void <init>(oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup)>(v);
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: oadd.io.netty.util.concurrent.Future terminationFuture()>();
interfaceinvoke v.<oadd.io.netty.util.concurrent.Future: oadd.io.netty.util.concurrent.Future addListener(oadd.io.netty.util.concurrent.GenericFutureListener)>(v);
v = v + 1;
goto label;
label:
v = new java.util.LinkedHashSet;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
specialinvoke v.<java.util.LinkedHashSet: void <init>(int)>(v);
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
staticinvoke <java.util.Collections: boolean addAll(java.util.Collection,java.lang.Object[])>(v, v);
v = staticinvoke <java.util.Collections: java.util.Set unmodifiableSet(java.util.Set)>(v);
v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: java.util.Set readonlyChildren> = v;
return;
catch java.lang.Exception from label to label with label;
catch java.lang.Throwable from label to label with label;
catch java.lang.InterruptedException from label to label with label;
}
protected java.util.concurrent.ThreadFactory newDefaultThreadFactory()
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
java.lang.Class v;
oadd.io.netty.util.concurrent.DefaultThreadFactory v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = new oadd.io.netty.util.concurrent.DefaultThreadFactory;
v = virtualinvoke v.<java.lang.Object: java.lang.Class getClass()>();
specialinvoke v.<oadd.io.netty.util.concurrent.DefaultThreadFactory: void <init>(java.lang.Class)>(v);
return v;
}
public oadd.io.netty.util.concurrent.EventExecutor next()
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
oadd.io.netty.util.concurrent.EventExecutor v;
oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser chooser>;
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutorChooserFactory$EventExecutorChooser: oadd.io.netty.util.concurrent.EventExecutor next()>();
return v;
}
public java.util.Iterator iterator()
{
java.util.Set v;
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
java.util.Iterator v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: java.util.Set readonlyChildren>;
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
return v;
}
public final int executorCount()
{
int v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
return v;
}
protected abstract transient oadd.io.netty.util.concurrent.EventExecutor newChild(java.util.concurrent.Executor, java.lang.Object[]) throws java.lang.Exception;
public oadd.io.netty.util.concurrent.Future shutdownGracefully(long, long, java.util.concurrent.TimeUnit)
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
oadd.io.netty.util.concurrent.Future v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
long v, v;
java.util.concurrent.TimeUnit v;
int v, v;
oadd.io.netty.util.concurrent.EventExecutor v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v := @parameter: long;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: oadd.io.netty.util.concurrent.Future shutdownGracefully(long,long,java.util.concurrent.TimeUnit)>(v, v, v);
v = v + 1;
goto label;
label:
v = virtualinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.Future terminationFuture()>();
return v;
}
public oadd.io.netty.util.concurrent.Future terminationFuture()
{
oadd.io.netty.util.concurrent.Promise v;
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.Promise terminationFuture>;
return v;
}
public void shutdown()
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
int v, v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
oadd.io.netty.util.concurrent.EventExecutor v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: void shutdown()>();
v = v + 1;
goto label;
label:
return;
}
public boolean isShuttingDown()
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
int v, v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
boolean v;
oadd.io.netty.util.concurrent.EventExecutor v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: boolean isShuttingDown()>();
if v != 0 goto label;
return 0;
label:
v = v + 1;
goto label;
label:
return 1;
}
public boolean isShutdown()
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
int v, v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
boolean v;
oadd.io.netty.util.concurrent.EventExecutor v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: boolean isShutdown()>();
if v != 0 goto label;
return 0;
label:
v = v + 1;
goto label;
label:
return 1;
}
public boolean isTerminated()
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
int v, v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
boolean v;
oadd.io.netty.util.concurrent.EventExecutor v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: boolean isTerminated()>();
if v != 0 goto label;
return 0;
label:
v = v + 1;
goto label;
label:
return 1;
}
public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException
{
oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup v;
oadd.io.netty.util.concurrent.EventExecutor[] v;
long v, v, v, v, v, v;
byte v;
int v, v;
boolean v, v;
oadd.io.netty.util.concurrent.EventExecutor v;
java.util.concurrent.TimeUnit v, v;
v := @this: oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v = staticinvoke <java.lang.System: long nanoTime()>();
v = virtualinvoke v.<java.util.concurrent.TimeUnit: long toNanos(long)>(v);
v = v + v;
v = v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: oadd.io.netty.util.concurrent.EventExecutor[] children>;
v = lengthof v;
v = 0;
label:
if v >= v goto label;
v = v[v];
label:
v = staticinvoke <java.lang.System: long nanoTime()>();
v = v - v;
v = v cmp 0L;
if v <= 0 goto label;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit NANOSECONDS>;
v = interfaceinvoke v.<oadd.io.netty.util.concurrent.EventExecutor: boolean awaitTermination(long,java.util.concurrent.TimeUnit)>(v, v);
if v == 0 goto label;
v = v + 1;
goto label;
label:
v = virtualinvoke v.<oadd.io.netty.util.concurrent.MultithreadEventExecutorGroup: boolean isTerminated()>();
return v;
}
}