public class io.netty.channel.ThreadPerChannelEventLoopGroup extends io.netty.util.concurrent.AbstractEventExecutorGroup implements io.netty.channel.EventLoopGroup
{
private final java.lang.Object[] childArgs;
private final int maxChannels;
final java.util.concurrent.Executor executor;
final java.util.Set activeChildren;
final java.util.Queue idleChildren;
private final io.netty.channel.ChannelException tooManyChannels;
private volatile boolean shuttingDown;
private final io.netty.util.concurrent.Promise terminationFuture;
private final io.netty.util.concurrent.FutureListener childTerminationListener;
protected void <init>()
{
io.netty.channel.ThreadPerChannelEventLoopGroup v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: void <init>(int)>(0);
return;
}
protected void <init>(int)
{
java.lang.Object[] v;
int v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.concurrent.ThreadFactory v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: int;
v = null;
v = newarray (java.lang.Object)[0];
specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: void <init>(int,java.util.concurrent.ThreadFactory,java.lang.Object[])>(v, v, v);
return;
}
protected transient void <init>(int, java.util.concurrent.ThreadFactory, java.lang.Object[])
{
io.netty.util.concurrent.ThreadPerTaskExecutor v;
java.lang.Object[] v;
int v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.concurrent.ThreadFactory v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
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 io.netty.util.concurrent.ThreadPerTaskExecutor;
specialinvoke v.<io.netty.util.concurrent.ThreadPerTaskExecutor: void <init>(java.util.concurrent.ThreadFactory)>(v);
label:
specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: 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[])
{
io.netty.util.concurrent.DefaultThreadFactory v;
java.lang.Object[] v, v;
java.util.concurrent.ConcurrentMap v;
io.netty.util.concurrent.GlobalEventExecutor v;
int v;
java.lang.String v;
io.netty.channel.ThreadPerChannelEventLoopGroup$1 v;
java.util.concurrent.Executor v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
io.netty.util.concurrent.ThreadPerTaskExecutor v;
io.netty.util.concurrent.DefaultPromise v;
io.netty.channel.ChannelException v;
java.lang.Class v;
java.lang.Object v;
java.util.concurrent.ConcurrentLinkedQueue v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: int;
v := @parameter: java.util.concurrent.Executor;
v := @parameter: java.lang.Object[];
specialinvoke v.<io.netty.util.concurrent.AbstractEventExecutorGroup: void <init>()>();
v = staticinvoke <io.netty.util.internal.PlatformDependent: java.util.concurrent.ConcurrentMap newConcurrentHashMap()>();
v = staticinvoke <java.util.Collections: java.util.Set newSetFromMap(java.util.Map)>(v);
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren> = v;
v = new java.util.concurrent.ConcurrentLinkedQueue;
specialinvoke v.<java.util.concurrent.ConcurrentLinkedQueue: void <init>()>();
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren> = v;
v = new io.netty.util.concurrent.DefaultPromise;
v = <io.netty.util.concurrent.GlobalEventExecutor: io.netty.util.concurrent.GlobalEventExecutor INSTANCE>;
specialinvoke v.<io.netty.util.concurrent.DefaultPromise: void <init>(io.netty.util.concurrent.EventExecutor)>(v);
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.Promise terminationFuture> = v;
v = new io.netty.channel.ThreadPerChannelEventLoopGroup$1;
specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup$1: void <init>(io.netty.channel.ThreadPerChannelEventLoopGroup)>(v);
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.FutureListener childTerminationListener> = v;
staticinvoke <io.netty.util.internal.ObjectUtil: int checkPositiveOrZero(int,java.lang.String)>(v, "maxChannels");
if v != null goto label;
v = new io.netty.util.concurrent.ThreadPerTaskExecutor;
v = new io.netty.util.concurrent.DefaultThreadFactory;
v = virtualinvoke v.<java.lang.Object: java.lang.Class getClass()>();
specialinvoke v.<io.netty.util.concurrent.DefaultThreadFactory: void <init>(java.lang.Class)>(v);
specialinvoke v.<io.netty.util.concurrent.ThreadPerTaskExecutor: void <init>(java.util.concurrent.ThreadFactory)>(v);
v = v;
label:
if v != null goto label;
v = <io.netty.util.internal.EmptyArrays: java.lang.Object[] EMPTY_OBJECTS>;
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.lang.Object[] childArgs> = v;
goto label;
label:
v = virtualinvoke v.<java.lang.Object: java.lang.Object clone()>();
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.lang.Object[] childArgs> = v;
label:
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: int maxChannels> = v;
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.concurrent.Executor executor> = v;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int)>(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[])>("too many channels (max: \u)");
v = staticinvoke <io.netty.channel.ChannelException: io.netty.channel.ChannelException newStatic(java.lang.String,java.lang.Class,java.lang.String)>(v, class "Lio/netty/channel/ThreadPerChannelEventLoopGroup;", "nextChild()");
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.channel.ChannelException tooManyChannels> = v;
return;
}
protected transient io.netty.channel.EventLoop newChild(java.lang.Object[]) throws java.lang.Exception
{
io.netty.channel.ThreadPerChannelEventLoopGroup v;
io.netty.channel.ThreadPerChannelEventLoop v;
java.lang.Object[] v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: java.lang.Object[];
v = new io.netty.channel.ThreadPerChannelEventLoop;
specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoop: void <init>(io.netty.channel.ThreadPerChannelEventLoopGroup)>(v);
return v;
}
public java.util.Iterator iterator()
{
java.util.Iterator v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
io.netty.util.internal.ReadOnlyIterator v;
java.util.Set v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = new io.netty.util.internal.ReadOnlyIterator;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
specialinvoke v.<io.netty.util.internal.ReadOnlyIterator: void <init>(java.util.Iterator)>(v);
return v;
}
public io.netty.channel.EventLoop next()
{
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.lang.UnsupportedOperationException v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = new java.lang.UnsupportedOperationException;
specialinvoke v.<java.lang.UnsupportedOperationException: void <init>()>();
throw v;
}
public io.netty.util.concurrent.Future shutdownGracefully(long, long, java.util.concurrent.TimeUnit)
{
io.netty.util.concurrent.Promise v;
java.util.Iterator v, v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
long v, v;
java.util.concurrent.TimeUnit v;
java.lang.Object v, v;
java.util.Queue v;
io.netty.util.concurrent.Future v;
boolean v, v, v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: long;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean shuttingDown> = 1;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: 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()>();
interfaceinvoke v.<io.netty.channel.EventLoop: io.netty.util.concurrent.Future shutdownGracefully(long,long,java.util.concurrent.TimeUnit)>(v, v, v);
goto label;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: 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()>();
interfaceinvoke v.<io.netty.channel.EventLoop: io.netty.util.concurrent.Future shutdownGracefully(long,long,java.util.concurrent.TimeUnit)>(v, v, v);
goto label;
label:
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean isTerminated()>();
if v == 0 goto label;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.Promise terminationFuture>;
interfaceinvoke v.<io.netty.util.concurrent.Promise: boolean trySuccess(java.lang.Object)>(null);
label:
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.Future terminationFuture()>();
return v;
}
public io.netty.util.concurrent.Future terminationFuture()
{
io.netty.channel.ThreadPerChannelEventLoopGroup v;
io.netty.util.concurrent.Promise v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.Promise terminationFuture>;
return v;
}
public void shutdown()
{
io.netty.util.concurrent.Promise v;
java.util.Iterator v, v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
java.lang.Object v, v;
java.util.Queue v;
boolean v, v, v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean shuttingDown> = 1;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: 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()>();
interfaceinvoke v.<io.netty.channel.EventLoop: void shutdown()>();
goto label;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: 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()>();
interfaceinvoke v.<io.netty.channel.EventLoop: void shutdown()>();
goto label;
label:
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean isTerminated()>();
if v == 0 goto label;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.Promise terminationFuture>;
interfaceinvoke v.<io.netty.util.concurrent.Promise: boolean trySuccess(java.lang.Object)>(null);
label:
return;
}
public boolean isShuttingDown()
{
java.util.Iterator v, v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
java.lang.Object v, v;
java.util.Queue v;
boolean v, v, v, v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: 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()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean isShuttingDown()>();
if v != 0 goto label;
return 0;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: 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()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean isShuttingDown()>();
if v != 0 goto label;
return 0;
label:
return 1;
}
public boolean isShutdown()
{
java.util.Iterator v, v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
java.lang.Object v, v;
java.util.Queue v;
boolean v, v, v, v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: 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()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean isShutdown()>();
if v != 0 goto label;
return 0;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: 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()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean isShutdown()>();
if v != 0 goto label;
return 0;
label:
return 1;
}
public boolean isTerminated()
{
java.util.Iterator v, v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
java.lang.Object v, v;
java.util.Queue v;
boolean v, v, v, v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: 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()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean isTerminated()>();
if v != 0 goto label;
return 0;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: 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()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean isTerminated()>();
if v != 0 goto label;
return 0;
label:
return 1;
}
public boolean awaitTermination(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException
{
long v, v, v, v, v, v, v, v;
byte v, v;
boolean v, v, v, v, v, v, v;
java.util.Iterator v, v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v;
java.util.concurrent.TimeUnit v, v, v;
java.lang.Object v, v;
java.util.Queue v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
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.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: 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 = staticinvoke <java.lang.System: long nanoTime()>();
v = v - v;
v = v cmp 0L;
if v > 0 goto label;
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean isTerminated()>();
return v;
label:
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit NANOSECONDS>;
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean awaitTermination(long,java.util.concurrent.TimeUnit)>(v, v);
if v != 0 goto label;
goto label;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: 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 = staticinvoke <java.lang.System: long nanoTime()>();
v = v - v;
v = v cmp 0L;
if v > 0 goto label;
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean isTerminated()>();
return v;
label:
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit NANOSECONDS>;
v = interfaceinvoke v.<io.netty.channel.EventLoop: boolean awaitTermination(long,java.util.concurrent.TimeUnit)>(v, v);
if v != 0 goto label;
goto label;
label:
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean isTerminated()>();
return v;
}
public io.netty.channel.ChannelFuture register(io.netty.channel.Channel)
{
java.lang.Throwable v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
io.netty.channel.EventLoop v;
io.netty.channel.ChannelFuture v;
io.netty.channel.Channel v;
io.netty.util.concurrent.GlobalEventExecutor v;
io.netty.channel.FailedChannelFuture v;
io.netty.channel.DefaultChannelPromise v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: io.netty.channel.Channel;
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "channel");
label:
v = specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.channel.EventLoop nextChild()>();
v = new io.netty.channel.DefaultChannelPromise;
specialinvoke v.<io.netty.channel.DefaultChannelPromise: void <init>(io.netty.channel.Channel,io.netty.util.concurrent.EventExecutor)>(v, v);
v = interfaceinvoke v.<io.netty.channel.EventLoop: io.netty.channel.ChannelFuture register(io.netty.channel.ChannelPromise)>(v);
label:
return v;
label:
v := @caughtexception;
v = new io.netty.channel.FailedChannelFuture;
v = <io.netty.util.concurrent.GlobalEventExecutor: io.netty.util.concurrent.GlobalEventExecutor INSTANCE>;
specialinvoke v.<io.netty.channel.FailedChannelFuture: void <init>(io.netty.channel.Channel,io.netty.util.concurrent.EventExecutor,java.lang.Throwable)>(v, v, v);
return v;
catch java.lang.Throwable from label to label with label;
}
public io.netty.channel.ChannelFuture register(io.netty.channel.ChannelPromise)
{
java.lang.Throwable v;
io.netty.channel.ChannelPromise v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
io.netty.channel.EventLoop v;
io.netty.channel.ChannelFuture v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: io.netty.channel.ChannelPromise;
label:
v = specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.channel.EventLoop nextChild()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: io.netty.channel.ChannelFuture register(io.netty.channel.ChannelPromise)>(v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<io.netty.channel.ChannelPromise: io.netty.channel.ChannelPromise setFailure(java.lang.Throwable)>(v);
return v;
catch java.lang.Throwable from label to label with label;
}
public io.netty.channel.ChannelFuture register(io.netty.channel.Channel, io.netty.channel.ChannelPromise)
{
io.netty.channel.Channel v;
java.lang.Throwable v;
io.netty.channel.ChannelPromise v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
io.netty.channel.EventLoop v;
io.netty.channel.ChannelFuture v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v := @parameter: io.netty.channel.Channel;
v := @parameter: io.netty.channel.ChannelPromise;
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "channel");
label:
v = specialinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.channel.EventLoop nextChild()>();
v = interfaceinvoke v.<io.netty.channel.EventLoop: io.netty.channel.ChannelFuture register(io.netty.channel.Channel,io.netty.channel.ChannelPromise)>(v, v);
label:
return v;
label:
v := @caughtexception;
interfaceinvoke v.<io.netty.channel.ChannelPromise: io.netty.channel.ChannelPromise setFailure(java.lang.Throwable)>(v);
return v;
catch java.lang.Throwable from label to label with label;
}
private io.netty.channel.EventLoop nextChild() throws java.lang.Exception
{
java.lang.Object[] v;
io.netty.util.concurrent.FutureListener v;
io.netty.channel.ThreadPerChannelEventLoopGroup v;
java.util.Set v, v;
io.netty.channel.ChannelException v;
java.util.concurrent.RejectedExecutionException v;
int v, v, v;
java.lang.Object v;
java.util.Queue v;
io.netty.util.concurrent.Future v;
boolean v;
v := @this: io.netty.channel.ThreadPerChannelEventLoopGroup;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: boolean shuttingDown>;
if v == 0 goto label;
v = new java.util.concurrent.RejectedExecutionException;
specialinvoke v.<java.util.concurrent.RejectedExecutionException: void <init>(java.lang.String)>("shutting down");
throw v;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Queue idleChildren>;
v = interfaceinvoke v.<java.util.Queue: java.lang.Object poll()>();
if v != null goto label;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: int maxChannels>;
if v <= 0 goto label;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
v = interfaceinvoke v.<java.util.Set: int size()>();
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: int maxChannels>;
if v < v goto label;
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.channel.ChannelException tooManyChannels>;
throw v;
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.lang.Object[] childArgs>;
v = virtualinvoke v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.channel.EventLoop newChild(java.lang.Object[])>(v);
v = interfaceinvoke v.<io.netty.channel.EventLoop: io.netty.util.concurrent.Future terminationFuture()>();
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: io.netty.util.concurrent.FutureListener childTerminationListener>;
interfaceinvoke v.<io.netty.util.concurrent.Future: io.netty.util.concurrent.Future addListener(io.netty.util.concurrent.GenericFutureListener)>(v);
label:
v = v.<io.netty.channel.ThreadPerChannelEventLoopGroup: java.util.Set activeChildren>;
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
return v;
}
}