final class io.netty.buffer.PoolChunk extends java.lang.Object implements io.netty.buffer.PoolChunkMetric
{
private static final int SIZE_BIT_LENGTH;
private static final int INUSED_BIT_LENGTH;
private static final int SUBPAGE_BIT_LENGTH;
private static final int BITMAP_IDX_BIT_LENGTH;
static final int IS_SUBPAGE_SHIFT;
static final int IS_USED_SHIFT;
static final int SIZE_SHIFT;
static final int RUN_OFFSET_SHIFT;
final io.netty.buffer.PoolArena arena;
final java.lang.Object base;
final java.lang.Object memory;
final boolean unpooled;
private final io.netty.buffer.LongLongHashMap runsAvailMap;
private final io.netty.buffer.LongPriorityQueue[] runsAvail;
private final java.util.concurrent.locks.ReentrantLock runsAvailLock;
private final io.netty.buffer.PoolSubpage[] subpages;
private final io.netty.util.internal.LongCounter pinnedBytes;
private final int pageSize;
private final int pageShifts;
private final int chunkSize;
private final java.util.Deque cachedNioBuffers;
int freeBytes;
io.netty.buffer.PoolChunkList parent;
io.netty.buffer.PoolChunk prev;
io.netty.buffer.PoolChunk next;
static final boolean $assertionsDisabled;
void <init>(io.netty.buffer.PoolArena, java.lang.Object, java.lang.Object, int, int, int, int)
{
io.netty.util.internal.LongCounter v;
long v;
int v, v, v, v, v, v;
io.netty.buffer.PoolSubpage[] v;
io.netty.buffer.LongPriorityQueue[] v;
java.util.concurrent.locks.ReentrantLock v;
io.netty.buffer.PoolArena v;
io.netty.buffer.PoolChunk v;
java.lang.Object v, v;
java.util.ArrayDeque v;
io.netty.buffer.LongLongHashMap v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: io.netty.buffer.PoolArena;
v := @parameter: java.lang.Object;
v := @parameter: java.lang.Object;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
v = staticinvoke <io.netty.util.internal.PlatformDependent: io.netty.util.internal.LongCounter newLongCounter()>();
v.<io.netty.buffer.PoolChunk: io.netty.util.internal.LongCounter pinnedBytes> = v;
v.<io.netty.buffer.PoolChunk: boolean unpooled> = 0;
v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena> = v;
v.<io.netty.buffer.PoolChunk: java.lang.Object base> = v;
v.<io.netty.buffer.PoolChunk: java.lang.Object memory> = v;
v.<io.netty.buffer.PoolChunk: int pageSize> = v;
v.<io.netty.buffer.PoolChunk: int pageShifts> = v;
v.<io.netty.buffer.PoolChunk: int chunkSize> = v;
v.<io.netty.buffer.PoolChunk: int freeBytes> = v;
v = staticinvoke <io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] newRunsAvailqueueArray(int)>(v);
v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] runsAvail> = v;
v = new java.util.concurrent.locks.ReentrantLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantLock: void <init>()>();
v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock> = v;
v = new io.netty.buffer.LongLongHashMap;
specialinvoke v.<io.netty.buffer.LongLongHashMap: void <init>(long)>(-1L);
v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongLongHashMap runsAvailMap> = v;
v = v >> v;
v = newarray (io.netty.buffer.PoolSubpage)[v];
v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages> = v;
v = v >> v;
v = v << 34;
specialinvoke v.<io.netty.buffer.PoolChunk: void insertAvailRun(int,int,long)>(0, v, v);
v = new java.util.ArrayDeque;
specialinvoke v.<java.util.ArrayDeque: void <init>(int)>(8);
v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers> = v;
return;
}
void <init>(io.netty.buffer.PoolArena, java.lang.Object, java.lang.Object, int)
{
io.netty.buffer.PoolArena v;
int v;
io.netty.buffer.PoolChunk v;
io.netty.util.internal.LongCounter v;
java.lang.Object v, v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: io.netty.buffer.PoolArena;
v := @parameter: java.lang.Object;
v := @parameter: java.lang.Object;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
v = staticinvoke <io.netty.util.internal.PlatformDependent: io.netty.util.internal.LongCounter newLongCounter()>();
v.<io.netty.buffer.PoolChunk: io.netty.util.internal.LongCounter pinnedBytes> = v;
v.<io.netty.buffer.PoolChunk: boolean unpooled> = 1;
v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena> = v;
v.<io.netty.buffer.PoolChunk: java.lang.Object base> = v;
v.<io.netty.buffer.PoolChunk: java.lang.Object memory> = v;
v.<io.netty.buffer.PoolChunk: int pageSize> = 0;
v.<io.netty.buffer.PoolChunk: int pageShifts> = 0;
v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongLongHashMap runsAvailMap> = null;
v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] runsAvail> = null;
v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock> = null;
v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages> = null;
v.<io.netty.buffer.PoolChunk: int chunkSize> = v;
v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers> = null;
return;
}
private static io.netty.buffer.LongPriorityQueue[] newRunsAvailqueueArray(int)
{
io.netty.buffer.LongPriorityQueue[] v;
int v, v, v;
io.netty.buffer.LongPriorityQueue v;
v := @parameter: int;
v = newarray (io.netty.buffer.LongPriorityQueue)[v];
v = 0;
label:
v = lengthof v;
if v >= v goto label;
v = new io.netty.buffer.LongPriorityQueue;
specialinvoke v.<io.netty.buffer.LongPriorityQueue: void <init>()>();
v[v] = v;
v = v + 1;
goto label;
label:
return v;
}
private void insertAvailRun(int, int, long)
{
io.netty.buffer.LongPriorityQueue[] v;
io.netty.buffer.PoolArena v;
long v;
int v, v, v, v;
io.netty.buffer.PoolChunk v;
io.netty.buffer.LongPriorityQueue v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v := @parameter: int;
v := @parameter: long;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: int pages2pageIdxFloor(int)>(v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] runsAvail>;
v = v[v];
virtualinvoke v.<io.netty.buffer.LongPriorityQueue: void offer(long)>(v);
specialinvoke v.<io.netty.buffer.PoolChunk: void insertAvailRun0(int,long)>(v, v);
if v <= 1 goto label;
v = staticinvoke <io.netty.buffer.PoolChunk: int lastPage(int,int)>(v, v);
specialinvoke v.<io.netty.buffer.PoolChunk: void insertAvailRun0(int,long)>(v, v);
label:
return;
}
private void insertAvailRun0(int, long)
{
long v, v;
java.lang.AssertionError v;
byte v;
int v;
io.netty.buffer.PoolChunk v;
io.netty.buffer.LongLongHashMap v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v := @parameter: long;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongLongHashMap runsAvailMap>;
v = virtualinvoke v.<io.netty.buffer.LongLongHashMap: long put(long,long)>(v, v);
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v cmp -1L;
if v == 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
return;
}
private void removeAvailRun(long)
{
io.netty.buffer.LongPriorityQueue[] v;
io.netty.buffer.PoolArena v;
int v, v;
io.netty.buffer.PoolChunk v;
long v;
io.netty.buffer.LongPriorityQueue v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = virtualinvoke v.<io.netty.buffer.PoolArena: int pages2pageIdxFloor(int)>(v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] runsAvail>;
v = v[v];
virtualinvoke v.<io.netty.buffer.LongPriorityQueue: void remove(long)>(v);
specialinvoke v.<io.netty.buffer.PoolChunk: void removeAvailRun0(long)>(v);
return;
}
private void removeAvailRun0(long)
{
int v, v, v;
io.netty.buffer.PoolChunk v;
long v;
io.netty.buffer.LongLongHashMap v, v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongLongHashMap runsAvailMap>;
virtualinvoke v.<io.netty.buffer.LongLongHashMap: void remove(long)>(v);
if v <= 1 goto label;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongLongHashMap runsAvailMap>;
v = staticinvoke <io.netty.buffer.PoolChunk: int lastPage(int,int)>(v, v);
virtualinvoke v.<io.netty.buffer.LongLongHashMap: void remove(long)>(v);
label:
return;
}
private static int lastPage(int, int)
{
int v, v, v, v;
v := @parameter: int;
v := @parameter: int;
v = v + v;
v = v - 1;
return v;
}
private long getAvailRunByOffset(int)
{
int v;
io.netty.buffer.PoolChunk v;
long v;
io.netty.buffer.LongLongHashMap v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongLongHashMap runsAvailMap>;
v = virtualinvoke v.<io.netty.buffer.LongLongHashMap: long get(long)>(v);
return v;
}
public int usage()
{
java.lang.Throwable v;
java.util.concurrent.locks.ReentrantLock v, v, v;
int v, v;
io.netty.buffer.PoolChunk v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v = v.<io.netty.buffer.PoolChunk: boolean unpooled>;
if v == 0 goto label;
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
goto label;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
v = specialinvoke v.<io.netty.buffer.PoolChunk: int usage(int)>(v);
return v;
catch java.lang.Throwable from label to label with label;
}
private int usage(int)
{
int v, v, v;
io.netty.buffer.PoolChunk v;
long v, v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
if v != 0 goto label;
return 100;
label:
v = v * 100L;
v = v.<io.netty.buffer.PoolChunk: int chunkSize>;
v = v / v;
if v != 0 goto label;
return 99;
label:
v = 100 - v;
return v;
}
boolean allocate(io.netty.buffer.PooledByteBuf, int, int, io.netty.buffer.PoolThreadCache)
{
long v;
java.lang.AssertionError v, v;
java.util.Deque v, v;
byte v, v;
int v, v, v, v;
boolean v, v, v, v;
io.netty.buffer.PoolArena v, v;
io.netty.buffer.PooledByteBuf v;
io.netty.buffer.PoolThreadCache v;
io.netty.buffer.PoolChunk v;
java.lang.Object v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: io.netty.buffer.PooledByteBuf;
v := @parameter: int;
v := @parameter: int;
v := @parameter: io.netty.buffer.PoolThreadCache;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = v.<io.netty.buffer.PoolArena: int smallMaxSizeIdx>;
if v > v goto label;
v = specialinvoke v.<io.netty.buffer.PoolChunk: long allocateSubpage(int)>(v);
v = v cmp 0L;
if v >= 0 goto label;
return 0;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = staticinvoke <io.netty.buffer.PoolChunk: boolean isSubpage(long)>(v);
if v != 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: int sizeIdx2size(int)>(v);
v = specialinvoke v.<io.netty.buffer.PoolChunk: long allocateRun(int)>(v);
v = v cmp 0L;
if v >= 0 goto label;
return 0;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = staticinvoke <io.netty.buffer.PoolChunk: boolean isSubpage(long)>(v);
if v == 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers>;
if v == null goto label;
v = v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers>;
v = interfaceinvoke v.<java.util.Deque: java.lang.Object pollLast()>();
goto label;
label:
v = null;
label:
virtualinvoke v.<io.netty.buffer.PoolChunk: void initBuf(io.netty.buffer.PooledByteBuf,java.nio.ByteBuffer,long,int,io.netty.buffer.PoolThreadCache)>(v, v, v, v, v);
return 1;
}
private long allocateRun(int)
{
java.lang.Throwable v;
long v;
java.lang.AssertionError v;
byte v, v;
int v, v, v, v, v, v, v, v, v, v;
java.lang.String v;
io.netty.buffer.LongPriorityQueue v;
boolean v, v;
io.netty.buffer.LongPriorityQueue[] v;
java.util.concurrent.locks.ReentrantLock v, v, v, v;
io.netty.buffer.PoolArena v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = v >> v;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: int pages2pageIdx(int)>(v);
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = specialinvoke v.<io.netty.buffer.PoolChunk: int runFirstBestFit(int)>(v);
v = (int) -1;
if v != v goto label;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return -1L;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] runsAvail>;
v = v[v];
v = virtualinvoke v.<io.netty.buffer.LongPriorityQueue: long poll()>();
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v cmp -1L;
if v == 0 goto label;
v = staticinvoke <io.netty.buffer.PoolChunk: boolean isUsed(long)>(v);
if v == 0 goto label;
label:
v = new java.lang.AssertionError;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (long)>(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[])>("invalid handle: \u0001");
specialinvoke v.<java.lang.AssertionError: void <init>(java.lang.Object)>(v);
throw v;
label:
specialinvoke v.<io.netty.buffer.PoolChunk: void removeAvailRun0(long)>(v);
v = v cmp -1L;
if v == 0 goto label;
v = specialinvoke v.<io.netty.buffer.PoolChunk: long splitLargeRun(long,int)>(v, v);
label:
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = staticinvoke <io.netty.buffer.PoolChunk: int runSize(int,long)>(v, v);
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
v = v - v;
v.<io.netty.buffer.PoolChunk: int freeBytes> = v;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
private int calculateRunSize(int)
{
java.lang.AssertionError v, v, v;
int v, v, v, v, v, v, v, v, v, v, v;
boolean v, v, v;
io.netty.buffer.PoolArena v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = v - 4;
v = 1 << v;
v = 0;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: int sizeIdx2size(int)>(v);
label:
v = v.<io.netty.buffer.PoolChunk: int pageSize>;
v = v + v;
v = v / v;
if v >= v goto label;
v = v * v;
if v != v goto label;
label:
if v <= v goto label;
v = v.<io.netty.buffer.PoolChunk: int pageSize>;
v = v - v;
v = v / v;
goto label;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v > 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolChunk: int chunkSize>;
if v <= v goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v >= v goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
return v;
}
private int runFirstBestFit(int)
{
io.netty.buffer.LongPriorityQueue[] v;
io.netty.buffer.PoolArena v, v;
int v, v, v, v, v, v, v, v;
io.netty.buffer.PoolChunk v;
io.netty.buffer.LongPriorityQueue v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
v = v.<io.netty.buffer.PoolChunk: int chunkSize>;
if v != v goto label;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = v.<io.netty.buffer.PoolArena: int nPSizes>;
v = v - 1;
return v;
label:
v = v;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = v.<io.netty.buffer.PoolArena: int nPSizes>;
if v >= v goto label;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.LongPriorityQueue[] runsAvail>;
v = v[v];
if v == null goto label;
v = virtualinvoke v.<io.netty.buffer.LongPriorityQueue: boolean isEmpty()>();
if v != 0 goto label;
return v;
label:
v = v + 1;
goto label;
label:
v = (int) -1;
return v;
}
private long splitLargeRun(long, int)
{
long v, v, v, v;
java.lang.AssertionError v, v;
int v, v, v, v, v;
io.netty.buffer.PoolChunk v;
boolean v, v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
v := @parameter: int;
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v > 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v <= v goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v - v;
if v <= 0 goto label;
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = v + v;
v = staticinvoke <io.netty.buffer.PoolChunk: long toRunHandle(int,int,int)>(v, v, 0);
specialinvoke v.<io.netty.buffer.PoolChunk: void insertAvailRun(int,int,long)>(v, v, v);
v = staticinvoke <io.netty.buffer.PoolChunk: long toRunHandle(int,int,int)>(v, v, 1);
return v;
label:
v = v | 8589934592L;
return v;
}
private long allocateSubpage(int)
{
java.lang.Throwable v;
long v, v;
java.lang.AssertionError v;
io.netty.buffer.PoolSubpage v, v, v;
byte v;
int v, v, v, v, v, v, v;
io.netty.buffer.PoolSubpage[] v, v;
boolean v;
io.netty.buffer.PoolArena v, v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: io.netty.buffer.PoolSubpage findSubpagePoolHead(int)>(v);
virtualinvoke v.<io.netty.buffer.PoolSubpage: void lock()>();
label:
v = specialinvoke v.<io.netty.buffer.PoolChunk: int calculateRunSize(int)>(v);
v = specialinvoke v.<io.netty.buffer.PoolChunk: long allocateRun(int)>(v);
v = v cmp 0L;
if v >= 0 goto label;
label:
virtualinvoke v.<io.netty.buffer.PoolSubpage: void unlock()>();
return -1L;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages>;
v = v[v];
if v == null goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: int sizeIdx2size(int)>(v);
v = new io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = staticinvoke <io.netty.buffer.PoolChunk: int runSize(int,long)>(v, v);
specialinvoke v.<io.netty.buffer.PoolSubpage: void <init>(io.netty.buffer.PoolSubpage,io.netty.buffer.PoolChunk,int,int,int,int)>(v, v, v, v, v, v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages>;
v[v] = v;
v = virtualinvoke v.<io.netty.buffer.PoolSubpage: long allocate()>();
label:
virtualinvoke v.<io.netty.buffer.PoolSubpage: void unlock()>();
return v;
label:
v := @caughtexception;
virtualinvoke v.<io.netty.buffer.PoolSubpage: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
catch java.lang.Throwable from label to label with label;
}
void free(long, int, java.nio.ByteBuffer)
{
io.netty.buffer.PoolSubpage v, v;
java.nio.ByteBuffer v;
io.netty.buffer.PoolSubpage[] v, v;
boolean v, v, v, v, v, v;
io.netty.buffer.PoolArena v, v;
io.netty.buffer.PoolChunk v;
java.lang.Throwable v, v;
long v, v, v, v;
java.lang.AssertionError v, v;
java.util.Deque v, v, v;
int v, v, v, v, v, v, v, v, v, v, v, v;
java.util.concurrent.locks.ReentrantLock v, v, v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
v := @parameter: int;
v := @parameter: java.nio.ByteBuffer;
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = staticinvoke <io.netty.buffer.PoolChunk: int runSize(int,long)>(v, v);
v = staticinvoke <io.netty.buffer.PoolChunk: boolean isSubpage(long)>(v);
if v == 0 goto label;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: int size2SizeIdx(int)>(v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = virtualinvoke v.<io.netty.buffer.PoolArena: io.netty.buffer.PoolSubpage findSubpagePoolHead(int)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages>;
v = v[v];
virtualinvoke v.<io.netty.buffer.PoolSubpage: void lock()>();
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v == null goto label;
v = v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy>;
if v != 0 goto label;
label:
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int bitmapIdx(long)>(v);
v = virtualinvoke v.<io.netty.buffer.PoolSubpage: boolean free(io.netty.buffer.PoolSubpage,int)>(v, v);
if v == 0 goto label;
label:
virtualinvoke v.<io.netty.buffer.PoolSubpage: void unlock()>();
return;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy>;
if v == 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages>;
v[v] = null;
label:
virtualinvoke v.<io.netty.buffer.PoolSubpage: void unlock()>();
goto label;
label:
v := @caughtexception;
virtualinvoke v.<io.netty.buffer.PoolSubpage: void unlock()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = specialinvoke v.<io.netty.buffer.PoolChunk: long collapseRuns(long)>(v);
v = v & -8589934593L;
v = v & -4294967297L;
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
specialinvoke v.<io.netty.buffer.PoolChunk: void insertAvailRun(int,int,long)>(v, v, v);
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
v = v + v;
v.<io.netty.buffer.PoolChunk: int freeBytes> = v;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
if v == null goto label;
v = v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers>;
if v == null goto label;
v = v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers>;
v = interfaceinvoke v.<java.util.Deque: int size()>();
v = <io.netty.buffer.PooledByteBufAllocator: int DEFAULT_MAX_CACHED_BYTEBUFFERS_PER_CHUNK>;
if v >= v goto label;
v = v.<io.netty.buffer.PoolChunk: java.util.Deque cachedNioBuffers>;
interfaceinvoke v.<java.util.Deque: boolean offer(java.lang.Object)>(v);
label:
return;
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;
}
private long collapseRuns(long)
{
io.netty.buffer.PoolChunk v;
long v, v, v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
v = specialinvoke v.<io.netty.buffer.PoolChunk: long collapsePast(long)>(v);
v = specialinvoke v.<io.netty.buffer.PoolChunk: long collapseNext(long)>(v);
return v;
}
private long collapsePast(long)
{
long v, v;
byte v, v;
int v, v, v, v, v, v, v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = v - 1;
v = specialinvoke v.<io.netty.buffer.PoolChunk: long getAvailRunByOffset(int)>(v);
v = v cmp -1L;
if v != 0 goto label;
return v;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = v cmp v;
if v == 0 goto label;
v = v + v;
if v != v goto label;
specialinvoke v.<io.netty.buffer.PoolChunk: void removeAvailRun(long)>(v);
v = v + v;
v = staticinvoke <io.netty.buffer.PoolChunk: long toRunHandle(int,int,int)>(v, v, 0);
goto label;
label:
return v;
}
private long collapseNext(long)
{
long v, v;
byte v, v;
int v, v, v, v, v, v, v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: long;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = v + v;
v = specialinvoke v.<io.netty.buffer.PoolChunk: long getAvailRunByOffset(int)>(v);
v = v cmp -1L;
if v != 0 goto label;
return v;
label:
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = v cmp v;
if v == 0 goto label;
v = v + v;
if v != v goto label;
specialinvoke v.<io.netty.buffer.PoolChunk: void removeAvailRun(long)>(v);
v = v + v;
v = staticinvoke <io.netty.buffer.PoolChunk: long toRunHandle(int,int,int)>(v, v, 0);
goto label;
label:
return v;
}
private static long toRunHandle(int, int, int)
{
long v, v, v, v, v;
int v, v, v;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
v = v << 49;
v = v << 34;
v = v | v;
v = v << 33;
v = v | v;
return v;
}
void initBuf(io.netty.buffer.PooledByteBuf, java.nio.ByteBuffer, long, int, io.netty.buffer.PoolThreadCache)
{
io.netty.buffer.PoolArena v;
io.netty.buffer.PooledByteBuf v;
long v;
io.netty.buffer.PooledByteBufAllocator v;
java.nio.ByteBuffer v;
io.netty.buffer.PoolThreadCache v, v;
int v, v, v, v, v, v;
io.netty.buffer.PoolChunk v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: io.netty.buffer.PooledByteBuf;
v := @parameter: java.nio.ByteBuffer;
v := @parameter: long;
v := @parameter: int;
v := @parameter: io.netty.buffer.PoolThreadCache;
v = staticinvoke <io.netty.buffer.PoolChunk: boolean isSubpage(long)>(v);
if v == 0 goto label;
virtualinvoke v.<io.netty.buffer.PoolChunk: void initBufWithSubpage(io.netty.buffer.PooledByteBuf,java.nio.ByteBuffer,long,int,io.netty.buffer.PoolThreadCache)>(v, v, v, v, v);
goto label;
label:
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = staticinvoke <io.netty.buffer.PoolChunk: int runSize(int,long)>(v, v);
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = v << v;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
v = v.<io.netty.buffer.PoolArena: io.netty.buffer.PooledByteBufAllocator parent>;
v = virtualinvoke v.<io.netty.buffer.PooledByteBufAllocator: io.netty.buffer.PoolThreadCache threadCache()>();
virtualinvoke v.<io.netty.buffer.PooledByteBuf: void init(io.netty.buffer.PoolChunk,java.nio.ByteBuffer,long,int,int,int,io.netty.buffer.PoolThreadCache)>(v, v, v, v, v, v, v);
label:
return;
}
void initBufWithSubpage(io.netty.buffer.PooledByteBuf, java.nio.ByteBuffer, long, int, io.netty.buffer.PoolThreadCache)
{
long v;
java.lang.AssertionError v, v;
io.netty.buffer.PoolSubpage v;
java.nio.ByteBuffer v;
int v, v, v, v, v, v, v, v, v, v, v;
io.netty.buffer.PoolSubpage[] v;
java.lang.String v;
boolean v, v, v;
io.netty.buffer.PooledByteBuf v;
io.netty.buffer.PoolThreadCache v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: io.netty.buffer.PooledByteBuf;
v := @parameter: java.nio.ByteBuffer;
v := @parameter: long;
v := @parameter: int;
v := @parameter: io.netty.buffer.PoolThreadCache;
v = staticinvoke <io.netty.buffer.PoolChunk: int runOffset(long)>(v);
v = staticinvoke <io.netty.buffer.PoolChunk: int bitmapIdx(long)>(v);
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolSubpage[] subpages>;
v = v[v];
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy>;
if v != 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
if v <= v goto label;
v = new java.lang.AssertionError;
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int,int)>(v, 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[])>("\u0001<=\u0001");
specialinvoke v.<java.lang.AssertionError: void <init>(java.lang.Object)>(v);
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: int pageShifts>;
v = v << v;
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
v = v * v;
v = v + v;
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
virtualinvoke v.<io.netty.buffer.PooledByteBuf: void init(io.netty.buffer.PoolChunk,java.nio.ByteBuffer,long,int,int,int,io.netty.buffer.PoolThreadCache)>(v, v, v, v, v, v, v);
return;
}
void incrementPinnedMemory(int)
{
int v;
io.netty.buffer.PoolChunk v;
io.netty.util.internal.LongCounter v;
java.lang.AssertionError v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v > 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.util.internal.LongCounter pinnedBytes>;
interfaceinvoke v.<io.netty.util.internal.LongCounter: void add(long)>(v);
return;
}
void decrementPinnedMemory(int)
{
int v, v;
io.netty.buffer.PoolChunk v;
io.netty.util.internal.LongCounter v;
java.lang.AssertionError v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v := @parameter: int;
v = <io.netty.buffer.PoolChunk: boolean $assertionsDisabled>;
if v != 0 goto label;
if v > 0 goto label;
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolChunk: io.netty.util.internal.LongCounter pinnedBytes>;
v = neg v;
interfaceinvoke v.<io.netty.util.internal.LongCounter: void add(long)>(v);
return;
}
public int chunkSize()
{
int v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolChunk;
v = v.<io.netty.buffer.PoolChunk: int chunkSize>;
return v;
}
public int freeBytes()
{
java.lang.Throwable v;
java.util.concurrent.locks.ReentrantLock v, v, v;
int v, v;
io.netty.buffer.PoolChunk v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v = v.<io.netty.buffer.PoolChunk: boolean unpooled>;
if v == 0 goto label;
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
return v;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return v;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
}
public int pinnedBytes()
{
io.netty.buffer.PoolChunk v;
io.netty.util.internal.LongCounter v;
long v;
v := @this: io.netty.buffer.PoolChunk;
v = v.<io.netty.buffer.PoolChunk: io.netty.util.internal.LongCounter pinnedBytes>;
v = interfaceinvoke v.<io.netty.util.internal.LongCounter: long value()>();
return v;
}
public java.lang.String toString()
{
java.lang.Throwable v;
java.util.concurrent.locks.ReentrantLock v, v, v;
int v, v, v, v, v, v;
io.netty.buffer.PoolChunk v;
java.lang.String v, v;
boolean v;
v := @this: io.netty.buffer.PoolChunk;
v = v.<io.netty.buffer.PoolChunk: boolean unpooled>;
if v == 0 goto label;
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
goto label;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
label:
v = v.<io.netty.buffer.PoolChunk: int freeBytes>;
label:
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolChunk: java.util.concurrent.locks.ReentrantLock runsAvailLock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
throw v;
label:
v = staticinvoke <java.lang.System: int identityHashCode(java.lang.Object)>(v);
v = staticinvoke <java.lang.Integer: java.lang.String toHexString(int)>(v);
v = specialinvoke v.<io.netty.buffer.PoolChunk: int usage(int)>(v);
v = v.<io.netty.buffer.PoolChunk: int chunkSize>;
v = v - v;
v = v.<io.netty.buffer.PoolChunk: int chunkSize>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,int,int,int)>(v, v, v, 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[])>("Chunk(\u0001: \u0001%, \u0001/\u)");
return v;
catch java.lang.Throwable from label to label with label;
}
void destroy()
{
io.netty.buffer.PoolChunk v;
io.netty.buffer.PoolArena v;
v := @this: io.netty.buffer.PoolChunk;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void destroyChunk(io.netty.buffer.PoolChunk)>(v);
return;
}
static int runOffset(long)
{
long v, v;
v := @parameter: long;
v = v >> 49;
return v;
}
static int runSize(int, long)
{
int v, v, v;
long v;
v := @parameter: int;
v := @parameter: long;
v = staticinvoke <io.netty.buffer.PoolChunk: int runPages(long)>(v);
v = v << v;
return v;
}
static int runPages(long)
{
long v, v, v;
v := @parameter: long;
v = v >> 34;
v = v & 32767L;
return v;
}
static boolean isUsed(long)
{
byte v;
long v, v, v;
boolean v;
v := @parameter: long;
v = v >> 33;
v = v & 1L;
v = v cmp 1L;
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
static boolean isRun(long)
{
long v;
boolean v, v;
v := @parameter: long;
v = staticinvoke <io.netty.buffer.PoolChunk: boolean isSubpage(long)>(v);
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
static boolean isSubpage(long)
{
byte v;
long v, v, v;
boolean v;
v := @parameter: long;
v = v >> 32;
v = v & 1L;
v = v cmp 1L;
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
static int bitmapIdx(long)
{
long v;
v := @parameter: long;
return v;
}
static void <clinit>()
{
java.lang.Class v;
boolean v, v;
v = class "Lio/netty/buffer/PoolChunk;";
v = virtualinvoke v.<java.lang.Class: boolean desiredAssertionStatus()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
<io.netty.buffer.PoolChunk: boolean $assertionsDisabled> = v;
return;
}
}