final class io.netty.buffer.PoolSubpage extends java.lang.Object implements io.netty.buffer.PoolSubpageMetric
{
final io.netty.buffer.PoolChunk chunk;
final int elemSize;
private final int pageShifts;
private final int runOffset;
private final int runSize;
private final long[] bitmap;
io.netty.buffer.PoolSubpage prev;
io.netty.buffer.PoolSubpage next;
boolean doNotDestroy;
private int maxNumElems;
private int bitmapLength;
private int nextAvail;
private int numAvail;
private final java.util.concurrent.locks.ReentrantLock lock;
static final boolean $assertionsDisabled;
void <init>()
{
java.util.concurrent.locks.ReentrantLock v;
int v, v, v, v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.locks.ReentrantLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantLock: void <init>()>();
v.<io.netty.buffer.PoolSubpage: java.util.concurrent.locks.ReentrantLock lock> = v;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk> = null;
v = (int) -1;
v.<io.netty.buffer.PoolSubpage: int pageShifts> = v;
v = (int) -1;
v.<io.netty.buffer.PoolSubpage: int runOffset> = v;
v = (int) -1;
v.<io.netty.buffer.PoolSubpage: int elemSize> = v;
v = (int) -1;
v.<io.netty.buffer.PoolSubpage: int runSize> = v;
v.<io.netty.buffer.PoolSubpage: long[] bitmap> = null;
return;
}
void <init>(io.netty.buffer.PoolSubpage, io.netty.buffer.PoolChunk, int, int, int, int)
{
io.netty.buffer.PoolSubpage v, v;
long[] v;
int v, v, v, v, v, v, v, v, v, v, v, v;
java.util.concurrent.locks.ReentrantLock v;
io.netty.buffer.PoolChunk v;
v := @this: io.netty.buffer.PoolSubpage;
v := @parameter: io.netty.buffer.PoolSubpage;
v := @parameter: io.netty.buffer.PoolChunk;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.locks.ReentrantLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantLock: void <init>()>();
v.<io.netty.buffer.PoolSubpage: java.util.concurrent.locks.ReentrantLock lock> = v;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk> = v;
v.<io.netty.buffer.PoolSubpage: int pageShifts> = v;
v.<io.netty.buffer.PoolSubpage: int runOffset> = v;
v.<io.netty.buffer.PoolSubpage: int runSize> = v;
v.<io.netty.buffer.PoolSubpage: int elemSize> = v;
v = v >>> 10;
v = newarray (long)[v];
v.<io.netty.buffer.PoolSubpage: long[] bitmap> = v;
v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy> = 1;
if v == 0 goto label;
v = v / v;
v.<io.netty.buffer.PoolSubpage: int numAvail> = v;
v.<io.netty.buffer.PoolSubpage: int maxNumElems> = v;
v.<io.netty.buffer.PoolSubpage: int nextAvail> = 0;
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
v = v >>> 6;
v.<io.netty.buffer.PoolSubpage: int bitmapLength> = v;
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
v = v & 63;
if v == 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: int bitmapLength>;
v = v + 1;
v.<io.netty.buffer.PoolSubpage: int bitmapLength> = v;
label:
specialinvoke v.<io.netty.buffer.PoolSubpage: void addToPool(io.netty.buffer.PoolSubpage)>(v);
return;
}
long allocate()
{
long v, v, v, v, v, v, v;
java.lang.AssertionError v, v;
io.netty.buffer.PoolSubpage v;
long[] v, v;
byte v;
int v, v, v, v, v, v, v, v;
java.lang.String v;
boolean v, v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
if v == 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy>;
if v != 0 goto label;
label:
return -1L;
label:
v = specialinvoke v.<io.netty.buffer.PoolSubpage: int getNextAvail()>();
if v >= 0 goto label;
specialinvoke v.<io.netty.buffer.PoolSubpage: void removeFromPool()>();
v = new java.lang.AssertionError;
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int,int,int)>(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[])>("No next available bitmap index found (bitmapIdx = \u), even though there are supposed to be (numAvail = \u) out of (maxNumElems = \u) available indexes.");
specialinvoke v.<java.lang.AssertionError: void <init>(java.lang.Object)>(v);
throw v;
label:
v = v >>> 6;
v = v & 63;
v = <io.netty.buffer.PoolSubpage: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: long[] bitmap>;
v = v[v];
v = v >>> v;
v = v & 1L;
v = v cmp 0L;
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.PoolSubpage: long[] bitmap>;
v = v[v];
v = 1L << v;
v = v | v;
v[v] = v;
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
v = v - 1;
v.<io.netty.buffer.PoolSubpage: int numAvail> = v;
if v != 0 goto label;
specialinvoke v.<io.netty.buffer.PoolSubpage: void removeFromPool()>();
label:
v = specialinvoke v.<io.netty.buffer.PoolSubpage: long toHandle(int)>(v);
return v;
}
boolean free(io.netty.buffer.PoolSubpage, int)
{
long v, v, v, v, v, v;
java.lang.AssertionError v;
io.netty.buffer.PoolSubpage v, v, v, v;
long[] v, v;
byte v;
int v, v, v, v, v, v, v, v, v;
boolean v;
v := @this: io.netty.buffer.PoolSubpage;
v := @parameter: io.netty.buffer.PoolSubpage;
v := @parameter: int;
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
if v != 0 goto label;
return 1;
label:
v = v >>> 6;
v = v & 63;
v = <io.netty.buffer.PoolSubpage: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: long[] bitmap>;
v = v[v];
v = v >>> v;
v = v & 1L;
v = v cmp 0L;
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.PoolSubpage: long[] bitmap>;
v = v[v];
v = 1L << v;
v = v ^ v;
v[v] = v;
specialinvoke v.<io.netty.buffer.PoolSubpage: void setNextAvail(int)>(v);
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
v = v + 1;
v.<io.netty.buffer.PoolSubpage: int numAvail> = v;
if v != 0 goto label;
specialinvoke v.<io.netty.buffer.PoolSubpage: void addToPool(io.netty.buffer.PoolSubpage)>(v);
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
if v <= 1 goto label;
return 1;
label:
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
if v == v goto label;
return 1;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev>;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
if v != v goto label;
return 1;
label:
v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy> = 0;
specialinvoke v.<io.netty.buffer.PoolSubpage: void removeFromPool()>();
return 0;
}
private void addToPool(io.netty.buffer.PoolSubpage)
{
java.lang.AssertionError v;
io.netty.buffer.PoolSubpage v, v, v, v, v, v;
boolean v;
v := @this: io.netty.buffer.PoolSubpage;
v := @parameter: io.netty.buffer.PoolSubpage;
v = <io.netty.buffer.PoolSubpage: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev>;
if v != null goto label;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
if v == null goto label;
label:
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev> = v;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next> = v;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev> = v;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next> = v;
return;
}
private void removeFromPool()
{
java.lang.AssertionError v;
io.netty.buffer.PoolSubpage v, v, v, v, v, v, v;
boolean v;
v := @this: io.netty.buffer.PoolSubpage;
v = <io.netty.buffer.PoolSubpage: boolean $assertionsDisabled>;
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev>;
if v == null goto label;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
if v != null goto label;
label:
v = new java.lang.AssertionError;
specialinvoke v.<java.lang.AssertionError: void <init>()>();
throw v;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev>;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next> = v;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next>;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev>;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev> = v;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage next> = null;
v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolSubpage prev> = null;
return;
}
private void setNextAvail(int)
{
int v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
v := @parameter: int;
v.<io.netty.buffer.PoolSubpage: int nextAvail> = v;
return;
}
private int getNextAvail()
{
int v, v, v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: int nextAvail>;
if v < 0 goto label;
v = (int) -1;
v.<io.netty.buffer.PoolSubpage: int nextAvail> = v;
return v;
label:
v = specialinvoke v.<io.netty.buffer.PoolSubpage: int findNextAvail()>();
return v;
}
private int findNextAvail()
{
long v, v;
io.netty.buffer.PoolSubpage v;
long[] v;
byte v;
int v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: long[] bitmap>;
v = v.<io.netty.buffer.PoolSubpage: int bitmapLength>;
v = 0;
label:
if v >= v goto label;
v = v[v];
v = v ^ -1L;
v = v cmp 0L;
if v == 0 goto label;
v = specialinvoke v.<io.netty.buffer.PoolSubpage: int findNextAvail0(int,long)>(v, v);
return v;
label:
v = v + 1;
goto label;
label:
v = (int) -1;
return v;
}
private int findNextAvail0(int, long)
{
long v, v;
io.netty.buffer.PoolSubpage v;
byte v;
int v, v, v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v := @parameter: int;
v := @parameter: long;
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
v = v << 6;
v = 0;
label:
if v >= 64 goto label;
v = v & 1L;
v = v cmp 0L;
if v != 0 goto label;
v = v | v;
if v >= v goto label;
return v;
label:
v = v >>> 1;
v = v + 1;
goto label;
label:
v = (int) -1;
return v;
}
private long toHandle(int)
{
long v, v, v, v, v, v;
io.netty.buffer.PoolSubpage v;
int v, v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v := @parameter: int;
v = v.<io.netty.buffer.PoolSubpage: int runSize>;
v = v.<io.netty.buffer.PoolSubpage: int pageShifts>;
v = v >> v;
v = v.<io.netty.buffer.PoolSubpage: int runOffset>;
v = v << 49;
v = v << 34;
v = v | v;
v = v | 8589934592L;
v = v | 4294967296L;
v = v | v;
return v;
}
public java.lang.String toString()
{
java.lang.Throwable v;
io.netty.buffer.PoolSubpage v;
int v, v, v, v, v, v, v, v, v, v, v, v;
java.lang.String v, v;
boolean v, v;
io.netty.buffer.PoolArena v, v, v;
io.netty.buffer.PoolChunk v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
if v != null goto label;
v = 1;
v = 0;
v = 0;
v = (int) -1;
v = v;
goto label;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void lock()>();
label:
v = v.<io.netty.buffer.PoolSubpage: boolean doNotDestroy>;
if v != 0 goto label;
v = 0;
v = (int) -1;
v = v;
v = (int) -1;
v = v;
v = (int) -1;
v = v;
goto label;
label:
v = 1;
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
goto label;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
throw v;
label:
if v != 0 goto label;
v = v.<io.netty.buffer.PoolSubpage: int runOffset>;
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[])>("(\u0001: not in use)");
return v;
label:
v = v.<io.netty.buffer.PoolSubpage: int runOffset>;
v = v - v;
v = v.<io.netty.buffer.PoolSubpage: int runOffset>;
v = v.<io.netty.buffer.PoolSubpage: int runSize>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (int,int,int,int,int,int)>(v, v, 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[])>("(\u0001: \u0001/\u, offset: \u, length: \u, elemSize: \u)");
return v;
catch java.lang.Throwable from label to label with label;
}
public int maxNumElements()
{
java.lang.Throwable v;
io.netty.buffer.PoolArena v, v, v;
io.netty.buffer.PoolSubpage v;
int v;
io.netty.buffer.PoolChunk v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
if v != null goto label;
return 0;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void lock()>();
label:
v = v.<io.netty.buffer.PoolSubpage: int maxNumElems>;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
return v;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
}
public int numAvailable()
{
java.lang.Throwable v;
io.netty.buffer.PoolArena v, v, v;
io.netty.buffer.PoolSubpage v;
int v;
io.netty.buffer.PoolChunk v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
if v != null goto label;
return 0;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void lock()>();
label:
v = v.<io.netty.buffer.PoolSubpage: int numAvail>;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
return v;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
}
public int elementSize()
{
java.lang.Throwable v;
io.netty.buffer.PoolArena v, v, v;
io.netty.buffer.PoolSubpage v;
int v, v;
io.netty.buffer.PoolChunk v, v, v, v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
if v != null goto label;
v = (int) -1;
return v;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void lock()>();
label:
v = v.<io.netty.buffer.PoolSubpage: int elemSize>;
label:
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
return v;
label:
v := @caughtexception;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
v = v.<io.netty.buffer.PoolChunk: io.netty.buffer.PoolArena arena>;
virtualinvoke v.<io.netty.buffer.PoolArena: void unlock()>();
throw v;
catch java.lang.Throwable from label to label with label;
}
public int pageSize()
{
int v, v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: int pageShifts>;
v = 1 << v;
return v;
}
void destroy()
{
io.netty.buffer.PoolChunk v, v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
if v == null goto label;
v = v.<io.netty.buffer.PoolSubpage: io.netty.buffer.PoolChunk chunk>;
virtualinvoke v.<io.netty.buffer.PoolChunk: void destroy()>();
label:
return;
}
void lock()
{
java.util.concurrent.locks.ReentrantLock v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: java.util.concurrent.locks.ReentrantLock lock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void lock()>();
return;
}
void unlock()
{
java.util.concurrent.locks.ReentrantLock v;
io.netty.buffer.PoolSubpage v;
v := @this: io.netty.buffer.PoolSubpage;
v = v.<io.netty.buffer.PoolSubpage: java.util.concurrent.locks.ReentrantLock lock>;
virtualinvoke v.<java.util.concurrent.locks.ReentrantLock: void unlock()>();
return;
}
static void <clinit>()
{
java.lang.Class v;
boolean v, v;
v = class "Lio/netty/buffer/PoolSubpage;";
v = virtualinvoke v.<java.lang.Class: boolean desiredAssertionStatus()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
<io.netty.buffer.PoolSubpage: boolean $assertionsDisabled> = v;
return;
}
}