final class io.netty.util.Recycler$LocalPool extends java.lang.Object implements io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue$Consumer
{
private final int ratioInterval;
private final int chunkSize;
private final java.util.ArrayDeque batch;
private volatile java.lang.Thread owner;
private volatile io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue pooledHandles;
private int ratioCounter;
void <init>(int, int, int)
{
java.lang.Thread v, v;
int v, v, v;
io.netty.util.Recycler$BlockingMessageQueue v;
java.util.Queue v;
io.netty.util.Recycler$LocalPool v;
java.util.ArrayDeque v;
boolean v, v, v;
v := @this: io.netty.util.Recycler$LocalPool;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
v.<io.netty.util.Recycler$LocalPool: int ratioInterval> = v;
v.<io.netty.util.Recycler$LocalPool: int chunkSize> = v;
v = new java.util.ArrayDeque;
specialinvoke v.<java.util.ArrayDeque: void <init>(int)>(v);
v.<io.netty.util.Recycler$LocalPool: java.util.ArrayDeque batch> = v;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = <io.netty.util.Recycler: boolean BATCH_FAST_TL_ONLY>;
if v == 0 goto label;
v = v instanceof io.netty.util.concurrent.FastThreadLocalThread;
if v == 0 goto label;
label:
v = v;
goto label;
label:
v = null;
label:
v.<io.netty.util.Recycler$LocalPool: java.lang.Thread owner> = v;
v = <io.netty.util.Recycler: boolean BLOCKING_POOL>;
if v == 0 goto label;
v = new io.netty.util.Recycler$BlockingMessageQueue;
specialinvoke v.<io.netty.util.Recycler$BlockingMessageQueue: void <init>(int)>(v);
v.<io.netty.util.Recycler$LocalPool: io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue pooledHandles> = v;
goto label;
label:
v = staticinvoke <io.netty.util.internal.PlatformDependent: java.util.Queue newMpscQueue(int,int)>(v, v);
v.<io.netty.util.Recycler$LocalPool: io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue pooledHandles> = v;
label:
v.<io.netty.util.Recycler$LocalPool: int ratioCounter> = v;
return;
}
io.netty.util.Recycler$DefaultHandle claim()
{
io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue v;
int v;
java.lang.Object v;
io.netty.util.Recycler$LocalPool v;
java.util.ArrayDeque v, v;
boolean v;
v := @this: io.netty.util.Recycler$LocalPool;
v = v.<io.netty.util.Recycler$LocalPool: io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue pooledHandles>;
if v != null goto label;
return null;
label:
v = v.<io.netty.util.Recycler$LocalPool: java.util.ArrayDeque batch>;
v = virtualinvoke v.<java.util.ArrayDeque: boolean isEmpty()>();
if v == 0 goto label;
v = v.<io.netty.util.Recycler$LocalPool: int chunkSize>;
interfaceinvoke v.<io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue: int drain(io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue$Consumer,int)>(v, v);
label:
v = v.<io.netty.util.Recycler$LocalPool: java.util.ArrayDeque batch>;
v = virtualinvoke v.<java.util.ArrayDeque: java.lang.Object pollFirst()>();
if null == v goto label;
virtualinvoke v.<io.netty.util.Recycler$DefaultHandle: void toClaimed()>();
label:
return v;
}
void release(io.netty.util.Recycler$DefaultHandle, boolean)
{
io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue v;
java.lang.Thread$State v, v;
io.netty.util.Recycler$DefaultHandle v;
java.lang.Thread v, v;
int v, v;
io.netty.util.Recycler$LocalPool v;
java.util.ArrayDeque v;
boolean v;
v := @this: io.netty.util.Recycler$LocalPool;
v := @parameter: io.netty.util.Recycler$DefaultHandle;
v := @parameter: boolean;
if v == 0 goto label;
virtualinvoke v.<io.netty.util.Recycler$DefaultHandle: void toAvailable()>();
goto label;
label:
virtualinvoke v.<io.netty.util.Recycler$DefaultHandle: void unguardedToAvailable()>();
label:
v = v.<io.netty.util.Recycler$LocalPool: java.lang.Thread owner>;
if v == null goto label;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
if v != v goto label;
v = v.<io.netty.util.Recycler$LocalPool: java.util.ArrayDeque batch>;
v = virtualinvoke v.<java.util.ArrayDeque: int size()>();
v = v.<io.netty.util.Recycler$LocalPool: int chunkSize>;
if v >= v goto label;
virtualinvoke v.<io.netty.util.Recycler$LocalPool: void accept(io.netty.util.Recycler$DefaultHandle)>(v);
goto label;
label:
if v == null goto label;
v = virtualinvoke v.<java.lang.Thread: java.lang.Thread$State getState()>();
v = <java.lang.Thread$State: java.lang.Thread$State TERMINATED>;
if v != v goto label;
v.<io.netty.util.Recycler$LocalPool: java.lang.Thread owner> = null;
v.<io.netty.util.Recycler$LocalPool: io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue pooledHandles> = null;
goto label;
label:
v = v.<io.netty.util.Recycler$LocalPool: io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue pooledHandles>;
if v == null goto label;
interfaceinvoke v.<io.netty.util.internal.shaded.org.jctools.queues.MessagePassingQueue: boolean relaxedOffer(java.lang.Object)>(v);
label:
return;
}
io.netty.util.Recycler$DefaultHandle newHandle()
{
int v, v, v;
io.netty.util.Recycler$DefaultHandle v;
io.netty.util.Recycler$LocalPool v;
v := @this: io.netty.util.Recycler$LocalPool;
v = v.<io.netty.util.Recycler$LocalPool: int ratioCounter>;
v = v + 1;
v.<io.netty.util.Recycler$LocalPool: int ratioCounter> = v;
v = v.<io.netty.util.Recycler$LocalPool: int ratioInterval>;
if v < v goto label;
v.<io.netty.util.Recycler$LocalPool: int ratioCounter> = 0;
v = new io.netty.util.Recycler$DefaultHandle;
specialinvoke v.<io.netty.util.Recycler$DefaultHandle: void <init>(io.netty.util.Recycler$LocalPool)>(v);
return v;
label:
return null;
}
public void accept(io.netty.util.Recycler$DefaultHandle)
{
io.netty.util.Recycler$DefaultHandle v;
io.netty.util.Recycler$LocalPool v;
java.util.ArrayDeque v;
v := @this: io.netty.util.Recycler$LocalPool;
v := @parameter: io.netty.util.Recycler$DefaultHandle;
v = v.<io.netty.util.Recycler$LocalPool: java.util.ArrayDeque batch>;
virtualinvoke v.<java.util.ArrayDeque: void addLast(java.lang.Object)>(v);
return;
}
}