public class org.h2.util.AbbaDetector
minor version: 0
major version: 59
flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
this_class: org.h2.util.AbbaDetector
super_class: java.lang.Object
{
private static final boolean TRACE;
descriptor: Z
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 0
private static final java.lang.ThreadLocal<java.util.Deque<java.lang.Object>> STACK;
descriptor: Ljava/lang/ThreadLocal;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/lang/ThreadLocal<Ljava/util/Deque<Ljava/lang/Object;>;>;
private static final java.util.Map<java.lang.Object, java.util.Map<java.lang.Object, java.lang.Exception>> LOCK_ORDERING;
descriptor: Ljava/util/Map;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/Map<Ljava/lang/Object;Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Exception;>;>;
private static final java.util.Set<java.lang.String> KNOWN_DEADLOCKS;
descriptor: Ljava/util/Set;
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
Signature: Ljava/util/Set<Ljava/lang/String;>;
static void <clinit>();
descriptor: ()V
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=0, args_size=0
0: new org.h2.util.AbbaDetector$1
dup
invokespecial org.h2.util.AbbaDetector$1.<init>:()V
1: putstatic org.h2.util.AbbaDetector.STACK:Ljava/lang/ThreadLocal;
2: new java.util.WeakHashMap
dup
invokespecial java.util.WeakHashMap.<init>:()V
3: putstatic org.h2.util.AbbaDetector.LOCK_ORDERING:Ljava/util/Map;
4: new java.util.HashSet
dup
invokespecial java.util.HashSet.<init>:()V
putstatic org.h2.util.AbbaDetector.KNOWN_DEADLOCKS:Ljava/util/Set;
return
LocalVariableTable:
Start End Slot Name Signature
public void <init>();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
invokespecial java.lang.Object.<init>:()V
return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/h2/util/AbbaDetector;
public static java.lang.Object begin(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
flags: (0x0009) ACC_PUBLIC, ACC_STATIC
Code:
stack=2, locals=3, args_size=1
start local 0 0: aload 0
ifnonnull 4
1: new org.h2.util.AbbaDetector$2
dup
invokespecial org.h2.util.AbbaDetector$2.<init>:()V
2: getfield org.h2.util.AbbaDetector$2.clazz:Ljava/lang/Class;
3: astore 0
4: StackMap locals:
StackMap stack:
getstatic org.h2.util.AbbaDetector.STACK:Ljava/lang/ThreadLocal;
invokevirtual java.lang.ThreadLocal.get:()Ljava/lang/Object;
checkcast java.util.Deque
astore 1
start local 1 5: aload 1
invokeinterface java.util.Deque.isEmpty:()Z
ifne 13
6: aload 1
aload 0
invokeinterface java.util.Deque.contains:(Ljava/lang/Object;)Z
ifeq 12
7: aload 0
areturn
8: StackMap locals: java.util.Deque
StackMap stack:
aload 1
invokeinterface java.util.Deque.peek:()Ljava/lang/Object;
astore 2
start local 2 9: aload 2
invokestatic java.lang.Thread.holdsLock:(Ljava/lang/Object;)Z
ifeq 11
10: goto 13
11: StackMap locals: java.lang.Object
StackMap stack:
aload 1
invokeinterface java.util.Deque.pop:()Ljava/lang/Object;
pop
end local 2 12: StackMap locals:
StackMap stack:
aload 1
invokeinterface java.util.Deque.isEmpty:()Z
ifeq 8
13: StackMap locals:
StackMap stack:
aload 1
invokeinterface java.util.Deque.isEmpty:()Z
ifne 15
14: aload 0
aload 1
invokestatic org.h2.util.AbbaDetector.markHigher:(Ljava/lang/Object;Ljava/util/Deque;)V
15: StackMap locals:
StackMap stack:
aload 1
aload 0
invokeinterface java.util.Deque.push:(Ljava/lang/Object;)V
16: aload 0
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 17 0 o Ljava/lang/Object;
5 17 1 stack Ljava/util/Deque<Ljava/lang/Object;>;
9 12 2 last Ljava/lang/Object;
MethodParameters:
Name Flags
o
private static java.lang.Object getTest(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/Object;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 o Ljava/lang/Object;
MethodParameters:
Name Flags
o
private static java.lang.String getObjectName(java.lang.Object);
descriptor: (Ljava/lang/Object;)Ljava/lang/String;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: new java.lang.StringBuilder
dup
aload 0
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getSimpleName:()Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
ldc "@"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 0
invokestatic java.lang.System.identityHashCode:(Ljava/lang/Object;)I
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 o Ljava/lang/Object;
MethodParameters:
Name Flags
o
private static synchronized void markHigher(, java.util.Deque<java.lang.Object>);
descriptor: (Ljava/lang/Object;Ljava/util/Deque;)V
flags: (0x002a) ACC_PRIVATE, ACC_STATIC, ACC_SYNCHRONIZED
Code:
stack=3, locals=13, args_size=2
start local 0 start local 1 0: aload 0
invokestatic org.h2.util.AbbaDetector.getTest:(Ljava/lang/Object;)Ljava/lang/Object;
astore 2
start local 2 1: getstatic org.h2.util.AbbaDetector.LOCK_ORDERING:Ljava/util/Map;
aload 2
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.util.Map
astore 3
start local 3 2: aload 3
ifnonnull 5
3: new java.util.WeakHashMap
dup
invokespecial java.util.WeakHashMap.<init>:()V
astore 3
4: getstatic org.h2.util.AbbaDetector.LOCK_ORDERING:Ljava/util/Map;
aload 2
aload 3
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
5: StackMap locals: java.lang.Object java.util.Map
StackMap stack:
aconst_null
astore 4
start local 4 6: aload 1
invokeinterface java.util.Deque.iterator:()Ljava/util/Iterator;
astore 6
goto 29
StackMap locals: java.lang.Object java.util.Deque java.lang.Object java.util.Map java.lang.Exception top java.util.Iterator
StackMap stack:
7: aload 6
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
astore 5
start local 5 8: aload 5
invokestatic org.h2.util.AbbaDetector.getTest:(Ljava/lang/Object;)Ljava/lang/Object;
astore 7
start local 7 9: aload 7
aload 2
if_acmpne 11
10: goto 29
11: StackMap locals: java.lang.Object java.util.Deque java.lang.Object java.util.Map java.lang.Exception java.lang.Object java.util.Iterator java.lang.Object
StackMap stack:
getstatic org.h2.util.AbbaDetector.LOCK_ORDERING:Ljava/util/Map;
aload 7
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.util.Map
astore 8
start local 8 12: aload 8
ifnull 25
13: aload 8
aload 2
invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
checkcast java.lang.Exception
astore 9
start local 9 14: aload 9
ifnull 25
15: new java.lang.StringBuilder
dup
invokespecial java.lang.StringBuilder.<init>:()V
aload 2
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
ldc " "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 7
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
astore 10
start local 10 16: getstatic org.h2.util.AbbaDetector.KNOWN_DEADLOCKS:Ljava/util/Set;
aload 10
invokeinterface java.util.Set.contains:(Ljava/lang/Object;)Z
ifne 25
17: new java.lang.StringBuilder
dup
aload 2
invokestatic org.h2.util.AbbaDetector.getObjectName:(Ljava/lang/Object;)Ljava/lang/String;
invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
18: ldc " synchronized after \n "
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
aload 7
invokestatic org.h2.util.AbbaDetector.getObjectName:(Ljava/lang/Object;)Ljava/lang/String;
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
19: ldc ", but in the past before"
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
20: invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
astore 11
start local 11 21: new java.lang.RuntimeException
dup
aload 11
invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/String;)V
astore 12
start local 12 22: aload 12
aload 9
invokevirtual java.lang.RuntimeException.initCause:(Ljava/lang/Throwable;)Ljava/lang/Throwable;
pop
23: aload 12
getstatic java.lang.System.out:Ljava/io/PrintStream;
invokevirtual java.lang.RuntimeException.printStackTrace:(Ljava/io/PrintStream;)V
24: getstatic org.h2.util.AbbaDetector.KNOWN_DEADLOCKS:Ljava/util/Set;
aload 10
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
end local 12 end local 11 end local 10 end local 9 25: StackMap locals: java.util.Map
StackMap stack:
aload 3
aload 7
invokeinterface java.util.Map.containsKey:(Ljava/lang/Object;)Z
ifne 29
26: aload 4
ifnonnull 28
27: new java.lang.Exception
dup
ldc "Before"
invokespecial java.lang.Exception.<init>:(Ljava/lang/String;)V
astore 4
28: StackMap locals:
StackMap stack:
aload 3
aload 7
aload 4
invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
pop
end local 8 end local 7 end local 5 29: StackMap locals: java.lang.Object java.util.Deque java.lang.Object java.util.Map java.lang.Exception top java.util.Iterator
StackMap stack:
aload 6
invokeinterface java.util.Iterator.hasNext:()Z
ifne 7
30: return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 31 0 o Ljava/lang/Object;
0 31 1 older Ljava/util/Deque<Ljava/lang/Object;>;
1 31 2 test Ljava/lang/Object;
2 31 3 map Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Exception;>;
6 31 4 oldException Ljava/lang/Exception;
8 29 5 old Ljava/lang/Object;
9 29 7 oldTest Ljava/lang/Object;
12 29 8 oldMap Ljava/util/Map<Ljava/lang/Object;Ljava/lang/Exception;>;
14 25 9 e Ljava/lang/Exception;
16 25 10 deadlockType Ljava/lang/String;
21 25 11 message Ljava/lang/String;
22 25 12 ex Ljava/lang/RuntimeException;
Signature: (Ljava/lang/Object;Ljava/util/Deque<Ljava/lang/Object;>;)V
MethodParameters:
Name Flags
o
older
}
SourceFile: "AbbaDetector.java"
NestMembers:
org.h2.util.AbbaDetector$1 org.h2.util.AbbaDetector$2
InnerClasses:
org.h2.util.AbbaDetector$1
org.h2.util.AbbaDetector$2