public class org.wildfly.common.lock.SpinLock extends java.lang.Object implements org.wildfly.common.lock.ExtendedLock
{
private static final long ownerOffset;
private static final int defaultSpinLimit;
private volatile java.lang.Thread owner;
private int level;
private final int spinLimit;
public void <init>()
{
int v;
org.wildfly.common.lock.SpinLock v;
v := @this: org.wildfly.common.lock.SpinLock;
v = <org.wildfly.common.lock.SpinLock: int defaultSpinLimit>;
specialinvoke v.<org.wildfly.common.lock.SpinLock: void <init>(int)>(v);
return;
}
public void <init>(int)
{
int v;
org.wildfly.common.lock.SpinLock v;
v := @this: org.wildfly.common.lock.SpinLock;
v := @parameter: int;
specialinvoke v.<java.lang.Object: void <init>()>();
staticinvoke <org.wildfly.common.Assert: void checkMinimumParameter(java.lang.String,int,int)>("spinLimit", 0, v);
v.<org.wildfly.common.lock.SpinLock: int spinLimit> = v;
return;
}
public boolean isLocked()
{
org.wildfly.common.lock.SpinLock v;
boolean v;
java.lang.Thread v;
v := @this: org.wildfly.common.lock.SpinLock;
v = v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner>;
if v == null goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public boolean isHeldByCurrentThread()
{
org.wildfly.common.lock.SpinLock v;
java.lang.Thread v, v;
boolean v;
v := @this: org.wildfly.common.lock.SpinLock;
v = v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
if v != v goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
}
public boolean isFair()
{
org.wildfly.common.lock.SpinLock v;
v := @this: org.wildfly.common.lock.SpinLock;
return 1;
}
public void lock()
{
org.wildfly.common.lock.SpinLock v;
sun.misc.Unsafe v;
long v;
java.lang.Thread v, v, v;
int v, v, v, v;
boolean v;
v := @this: org.wildfly.common.lock.SpinLock;
v = 0;
label:
v = v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
if v != v goto label;
v = v.<org.wildfly.common.lock.SpinLock: int level>;
v = v + 1;
v.<org.wildfly.common.lock.SpinLock: int level> = v;
return;
label:
if v != null goto label;
v = <org.wildfly.common.lock.JDKSpecific: sun.misc.Unsafe unsafe>;
v = <org.wildfly.common.lock.SpinLock: long ownerOffset>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = virtualinvoke v.<sun.misc.Unsafe: boolean compareAndSwapObject(java.lang.Object,long,java.lang.Object,java.lang.Object)>(v, v, null, v);
if v == 0 goto label;
v.<org.wildfly.common.lock.SpinLock: int level> = 1;
return;
label:
v = v.<org.wildfly.common.lock.SpinLock: int spinLimit>;
if v < v goto label;
staticinvoke <java.lang.Thread: void yield()>();
goto label;
label:
staticinvoke <org.wildfly.common.lock.JDKSpecific: void onSpinWait()>();
v = v + 1;
goto label;
}
public void lockInterruptibly() throws java.lang.InterruptedException
{
org.wildfly.common.lock.SpinLock v;
sun.misc.Unsafe v;
long v;
java.lang.InterruptedException v;
java.lang.Thread v, v, v;
int v, v, v, v;
boolean v, v;
v := @this: org.wildfly.common.lock.SpinLock;
v = 0;
label:
v = staticinvoke <java.lang.Thread: boolean interrupted()>();
if v == 0 goto label;
v = new java.lang.InterruptedException;
specialinvoke v.<java.lang.InterruptedException: void <init>()>();
throw v;
label:
v = v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
if v != v goto label;
v = v.<org.wildfly.common.lock.SpinLock: int level>;
v = v + 1;
v.<org.wildfly.common.lock.SpinLock: int level> = v;
return;
label:
if v != null goto label;
v = <org.wildfly.common.lock.JDKSpecific: sun.misc.Unsafe unsafe>;
v = <org.wildfly.common.lock.SpinLock: long ownerOffset>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = virtualinvoke v.<sun.misc.Unsafe: boolean compareAndSwapObject(java.lang.Object,long,java.lang.Object,java.lang.Object)>(v, v, null, v);
if v == 0 goto label;
v.<org.wildfly.common.lock.SpinLock: int level> = 1;
return;
label:
v = v.<org.wildfly.common.lock.SpinLock: int spinLimit>;
if v < v goto label;
staticinvoke <java.lang.Thread: void yield()>();
goto label;
label:
staticinvoke <org.wildfly.common.lock.JDKSpecific: void onSpinWait()>();
v = v + 1;
goto label;
}
public boolean tryLock()
{
org.wildfly.common.lock.SpinLock v;
sun.misc.Unsafe v;
long v;
java.lang.Thread v, v, v;
int v, v;
boolean v;
v := @this: org.wildfly.common.lock.SpinLock;
v = v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
if v != v goto label;
v = v.<org.wildfly.common.lock.SpinLock: int level>;
v = v + 1;
v.<org.wildfly.common.lock.SpinLock: int level> = v;
return 1;
label:
if v != null goto label;
v = <org.wildfly.common.lock.JDKSpecific: sun.misc.Unsafe unsafe>;
v = <org.wildfly.common.lock.SpinLock: long ownerOffset>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
v = virtualinvoke v.<sun.misc.Unsafe: boolean compareAndSwapObject(java.lang.Object,long,java.lang.Object,java.lang.Object)>(v, v, null, v);
if v == 0 goto label;
v.<org.wildfly.common.lock.SpinLock: int level> = 1;
return 1;
label:
return 0;
}
public void unlock()
{
org.wildfly.common.lock.SpinLock v;
java.lang.IllegalMonitorStateException v;
java.lang.Thread v, v;
int v, v;
v := @this: org.wildfly.common.lock.SpinLock;
v = v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner>;
v = staticinvoke <java.lang.Thread: java.lang.Thread currentThread()>();
if v != v goto label;
v = v.<org.wildfly.common.lock.SpinLock: int level>;
v = v - 1;
v.<org.wildfly.common.lock.SpinLock: int level> = v;
if v != 0 goto label;
v.<org.wildfly.common.lock.SpinLock: java.lang.Thread owner> = null;
goto label;
label:
v = new java.lang.IllegalMonitorStateException;
specialinvoke v.<java.lang.IllegalMonitorStateException: void <init>()>();
throw v;
label:
return;
}
public boolean tryLock(long, java.util.concurrent.TimeUnit) throws java.lang.UnsupportedOperationException
{
java.util.concurrent.TimeUnit v;
org.wildfly.common.lock.SpinLock v;
java.lang.UnsupportedOperationException v;
long v;
v := @this: org.wildfly.common.lock.SpinLock;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
v = staticinvoke <org.wildfly.common.Assert: java.lang.UnsupportedOperationException unsupported()>();
throw v;
}
public java.util.concurrent.locks.Condition newCondition() throws java.lang.UnsupportedOperationException
{
org.wildfly.common.lock.SpinLock v;
java.lang.UnsupportedOperationException v;
v := @this: org.wildfly.common.lock.SpinLock;
v = staticinvoke <org.wildfly.common.Assert: java.lang.UnsupportedOperationException unsupported()>();
throw v;
}
static void <clinit>()
{
sun.misc.Unsafe v;
long v;
java.lang.reflect.Field v;
java.security.PrivilegedAction v;
java.lang.NoSuchFieldError v;
java.lang.NoSuchFieldException v;
int v;
java.lang.Class v;
java.lang.Object v;
java.lang.String v;
label:
v = <org.wildfly.common.lock.JDKSpecific: sun.misc.Unsafe unsafe>;
v = class "Lorg/wildfly/common/lock/SpinLock;";
v = virtualinvoke v.<java.lang.Class: java.lang.reflect.Field getDeclaredField(java.lang.String)>("owner");
v = virtualinvoke v.<sun.misc.Unsafe: long objectFieldOffset(java.lang.reflect.Field)>(v);
<org.wildfly.common.lock.SpinLock: long ownerOffset> = v;
label:
goto label;
label:
v := @caughtexception;
v = new java.lang.NoSuchFieldError;
v = virtualinvoke v.<java.lang.NoSuchFieldException: java.lang.String getMessage()>();
specialinvoke v.<java.lang.NoSuchFieldError: void <init>(java.lang.String)>(v);
throw v;
label:
v = staticinvoke <org.wildfly.common.lock.SpinLock$lambda_static_0__3801: java.security.PrivilegedAction bootstrap$()>();
v = staticinvoke <java.security.AccessController: java.lang.Object doPrivileged(java.security.PrivilegedAction)>(v);
v = virtualinvoke v.<java.lang.Integer: int intValue()>();
<org.wildfly.common.lock.SpinLock: int defaultSpinLimit> = v;
return;
catch java.lang.NoSuchFieldException from label to label with label;
}
}