class org.apache.cassandra.utils.concurrent.Ref$Visitor implements java.lang.Runnable
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: org.apache.cassandra.utils.concurrent.Ref$Visitor
super_class: java.lang.Object
{
final java.util.Deque<org.apache.cassandra.utils.concurrent.Ref$InProgressVisit> path;
descriptor: Ljava/util/Deque;
flags: (0x0010) ACC_FINAL
Signature: Ljava/util/Deque<Lorg/apache/cassandra/utils/concurrent/Ref$InProgressVisit;>;
final java.util.Set<java.lang.Object> visited;
descriptor: Ljava/util/Set;
flags: (0x0010) ACC_FINAL
Signature: Ljava/util/Set<Ljava/lang/Object;>;
int lastVisitedCount;
descriptor: I
flags: (0x0000)
RuntimeInvisibleAnnotations:
com.google.common.annotations.VisibleForTesting()
long iterations;
descriptor: J
flags: (0x0000)
RuntimeInvisibleAnnotations:
com.google.common.annotations.VisibleForTesting()
org.apache.cassandra.utils.concurrent.Ref$GlobalState visiting;
descriptor: Lorg/apache/cassandra/utils/concurrent/Ref$GlobalState;
flags: (0x0000)
java.util.Set<org.apache.cassandra.utils.concurrent.Ref$GlobalState> haveLoops;
descriptor: Ljava/util/Set;
flags: (0x0000)
Signature: Ljava/util/Set<Lorg/apache/cassandra/utils/concurrent/Ref$GlobalState;>;
void <init>();
descriptor: ()V
flags: (0x0000)
Code:
stack=3, locals=1, args_size=1
start local 0 // org.apache.cassandra.utils.concurrent.Ref$Visitor this
0: .line 521
aload 0 /* this */
invokespecial java.lang.Object.<init>:()V
1: .line 523
aload 0 /* this */
new java.util.ArrayDeque
dup
invokespecial java.util.ArrayDeque.<init>:()V
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
2: .line 524
aload 0 /* this */
new java.util.IdentityHashMap
dup
invokespecial java.util.IdentityHashMap.<init>:()V
invokestatic java.util.Collections.newSetFromMap:(Ljava/util/Map;)Ljava/util/Set;
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
3: .line 528
aload 0 /* this */
lconst_0
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.iterations:J
4: .line 521
return
end local 0 // org.apache.cassandra.utils.concurrent.Ref$Visitor this
LocalVariableTable:
Start End Slot Name Signature
0 5 0 this Lorg/apache/cassandra/utils/concurrent/Ref$Visitor;
public void run();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=1
start local 0 // org.apache.cassandra.utils.concurrent.Ref$Visitor this
0: .line 536
getstatic org.apache.cassandra.utils.concurrent.Ref.globallyExtant:Ljava/util/Set;
invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
astore 2
goto 11
StackMap locals: org.apache.cassandra.utils.concurrent.Ref$Visitor top java.util.Iterator
StackMap stack:
1: aload 2
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast org.apache.cassandra.utils.concurrent.Ref$GlobalState
astore 1 /* globalState */
start local 1 // org.apache.cassandra.utils.concurrent.Ref$GlobalState globalState
2: .line 538
aload 1 /* globalState */
getfield org.apache.cassandra.utils.concurrent.Ref$GlobalState.tidy:Lorg/apache/cassandra/utils/concurrent/RefCounted$Tidy;
ifnonnull 4
3: .line 539
goto 11
4: .line 542
StackMap locals: org.apache.cassandra.utils.concurrent.Ref$Visitor org.apache.cassandra.utils.concurrent.Ref$GlobalState java.util.Iterator
StackMap stack:
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
invokeinterface java.util.Deque.clear:()V
5: .line 543
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.clear:()V
6: .line 544
aload 0 /* this */
iconst_0
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.lastVisitedCount:I
7: .line 545
aload 0 /* this */
lconst_0
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.iterations:J
8: .line 546
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
aload 1 /* globalState */
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
9: .line 547
aload 0 /* this */
aload 1 /* globalState */
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visiting:Lorg/apache/cassandra/utils/concurrent/Ref$GlobalState;
10: .line 548
aload 0 /* this */
aload 1 /* globalState */
getfield org.apache.cassandra.utils.concurrent.Ref$GlobalState.tidy:Lorg/apache/cassandra/utils/concurrent/RefCounted$Tidy;
invokevirtual org.apache.cassandra.utils.concurrent.Ref$Visitor.traverse:(Lorg/apache/cassandra/utils/concurrent/RefCounted$Tidy;)V
end local 1 // org.apache.cassandra.utils.concurrent.Ref$GlobalState globalState
11: .line 536
StackMap locals: org.apache.cassandra.utils.concurrent.Ref$Visitor top java.util.Iterator
StackMap stack:
aload 2
invokeinterface java.util.Iterator.hasNext:()Z
ifne 1
12: .line 550
goto 23
13: .line 551
StackMap locals: org.apache.cassandra.utils.concurrent.Ref$Visitor
StackMap stack: java.lang.Throwable
astore 1 /* t */
start local 1 // java.lang.Throwable t
14: .line 553
aload 1 /* t */
invokevirtual java.lang.Throwable.printStackTrace:()V
end local 1 // java.lang.Throwable t
15: .line 557
aload 0 /* this */
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.size:()I
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.lastVisitedCount:I
16: .line 558
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
invokeinterface java.util.Deque.clear:()V
17: .line 559
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.clear:()V
goto 26
18: .line 556
StackMap locals:
StackMap stack: java.lang.Throwable
astore 3
19: .line 557
aload 0 /* this */
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.size:()I
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.lastVisitedCount:I
20: .line 558
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
invokeinterface java.util.Deque.clear:()V
21: .line 559
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.clear:()V
22: .line 560
aload 3
athrow
23: .line 557
StackMap locals:
StackMap stack:
aload 0 /* this */
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.size:()I
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.lastVisitedCount:I
24: .line 558
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
invokeinterface java.util.Deque.clear:()V
25: .line 559
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
invokeinterface java.util.Set.clear:()V
26: .line 561
StackMap locals:
StackMap stack:
return
end local 0 // org.apache.cassandra.utils.concurrent.Ref$Visitor this
LocalVariableTable:
Start End Slot Name Signature
0 27 0 this Lorg/apache/cassandra/utils/concurrent/Ref$Visitor;
2 11 1 globalState Lorg/apache/cassandra/utils/concurrent/Ref$GlobalState;
14 15 1 t Ljava/lang/Throwable;
Exception table:
from to target type
0 12 13 Class java.lang.Throwable
0 15 18 any
void traverse(org.apache.cassandra.utils.concurrent.RefCounted$Tidy);
descriptor: (Lorg/apache/cassandra/utils/concurrent/RefCounted$Tidy;)V
flags: (0x0000)
Code:
stack=11, locals=6, args_size=2
start local 0 // org.apache.cassandra.utils.concurrent.Ref$Visitor this
start local 1 // org.apache.cassandra.utils.concurrent.RefCounted$Tidy rootObject
0: .line 568
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
aload 1 /* rootObject */
aload 1 /* rootObject */
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokestatic org.apache.cassandra.utils.concurrent.Ref.getFields:(Ljava/lang/Class;)Ljava/util/List;
aconst_null
aload 1 /* rootObject */
invokeinterface org.apache.cassandra.utils.concurrent.RefCounted$Tidy.name:()Ljava/lang/String;
invokestatic org.apache.cassandra.utils.concurrent.Ref.newInProgressVisit:(Ljava/lang/Object;Ljava/util/List;Ljava/lang/reflect/Field;Ljava/lang/String;)Lorg/apache/cassandra/utils/concurrent/Ref$InProgressVisit;
invokeinterface java.util.Deque.offer:(Ljava/lang/Object;)Z
pop
1: .line 570
aconst_null
astore 2 /* inProgress */
start local 2 // org.apache.cassandra.utils.concurrent.Ref$InProgressVisit inProgress
2: .line 571
goto 34
3: .line 574
StackMap locals: org.apache.cassandra.utils.concurrent.Ref$InProgressVisit
StackMap stack:
aload 2 /* inProgress */
ifnonnull 5
4: .line 575
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
invokeinterface java.util.Deque.pollLast:()Ljava/lang/Object;
checkcast org.apache.cassandra.utils.concurrent.Ref$InProgressVisit
astore 2 /* inProgress */
5: .line 579
StackMap locals:
StackMap stack:
aload 2 /* inProgress */
invokevirtual org.apache.cassandra.utils.concurrent.Ref$InProgressVisit.nextChild:()Lorg/apache/cassandra/utils/Pair;
astore 3 /* p */
start local 3 // org.apache.cassandra.utils.Pair p
6: .line 580
aconst_null
astore 4 /* child */
start local 4 // java.lang.Object child
7: .line 581
aconst_null
astore 5 /* field */
start local 5 // java.lang.reflect.Field field
8: .line 583
aload 3 /* p */
ifnull 12
9: .line 585
aload 0 /* this */
dup
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.iterations:J
lconst_1
ladd
putfield org.apache.cassandra.utils.concurrent.Ref$Visitor.iterations:J
10: .line 586
aload 3 /* p */
getfield org.apache.cassandra.utils.Pair.left:Ljava/lang/Object;
astore 4 /* child */
11: .line 587
aload 3 /* p */
getfield org.apache.cassandra.utils.Pair.right:Ljava/lang/Object;
checkcast java.lang.reflect.Field
astore 5 /* field */
12: .line 590
StackMap locals: org.apache.cassandra.utils.Pair java.lang.Object java.lang.reflect.Field
StackMap stack:
aload 4 /* child */
ifnull 16
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visited:Ljava/util/Set;
aload 4 /* child */
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
ifeq 16
13: .line 592
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
aload 2 /* inProgress */
invokeinterface java.util.Deque.offer:(Ljava/lang/Object;)Z
pop
14: .line 593
aload 4 /* child */
aload 4 /* child */
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokestatic org.apache.cassandra.utils.concurrent.Ref.getFields:(Ljava/lang/Class;)Ljava/util/List;
aload 5 /* field */
aconst_null
invokestatic org.apache.cassandra.utils.concurrent.Ref.newInProgressVisit:(Ljava/lang/Object;Ljava/util/List;Ljava/lang/reflect/Field;Ljava/lang/String;)Lorg/apache/cassandra/utils/concurrent/Ref$InProgressVisit;
astore 2 /* inProgress */
15: .line 594
goto 34
16: .line 596
StackMap locals:
StackMap stack:
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visiting:Lorg/apache/cassandra/utils/concurrent/Ref$GlobalState;
aload 4 /* child */
if_acmpne 28
17: .line 598
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.haveLoops:Ljava/util/Set;
ifnull 19
18: .line 599
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.haveLoops:Ljava/util/Set;
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.visiting:Lorg/apache/cassandra/utils/concurrent/Ref$GlobalState;
invokeinterface java.util.Set.add:(Ljava/lang/Object;)Z
pop
19: .line 600
StackMap locals:
StackMap stack:
getstatic org.apache.cassandra.utils.concurrent.Ref.logger:Lorg/slf4j/Logger;
20: .line 601
getstatic org.apache.cassandra.utils.NoSpamLogger$Level.ERROR:Lorg/apache/cassandra/utils/NoSpamLogger$Level;
21: .line 602
aload 1 /* rootObject */
invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
invokevirtual java.lang.Class.getName:()Ljava/lang/String;
22: .line 603
lconst_1
23: .line 604
getstatic java.util.concurrent.TimeUnit.SECONDS:Ljava/util/concurrent/TimeUnit;
24: .line 605
ldc "Strong self-ref loop detected {}"
iconst_1
anewarray java.lang.Object
dup
iconst_0
25: .line 606
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
aastore
26: .line 600
invokestatic org.apache.cassandra.utils.NoSpamLogger.log:(Lorg/slf4j/Logger;Lorg/apache/cassandra/utils/NoSpamLogger$Level;Ljava/lang/String;JLjava/util/concurrent/TimeUnit;Ljava/lang/String;[Ljava/lang/Object;)Z
pop
27: .line 607
goto 34
28: .line 608
StackMap locals:
StackMap stack:
aload 4 /* child */
ifnonnull 34
29: .line 610
aload 2 /* inProgress */
invokestatic org.apache.cassandra.utils.concurrent.Ref.returnInProgressVisit:(Lorg/apache/cassandra/utils/concurrent/Ref$InProgressVisit;)V
30: .line 611
aconst_null
astore 2 /* inProgress */
31: .line 612
goto 34
end local 5 // java.lang.reflect.Field field
end local 4 // java.lang.Object child
end local 3 // org.apache.cassandra.utils.Pair p
32: .line 615
StackMap locals: org.apache.cassandra.utils.concurrent.Ref$Visitor org.apache.cassandra.utils.concurrent.RefCounted$Tidy org.apache.cassandra.utils.concurrent.Ref$InProgressVisit
StackMap stack: java.lang.IllegalAccessException
astore 3 /* e */
start local 3 // java.lang.IllegalAccessException e
33: .line 617
getstatic org.apache.cassandra.utils.concurrent.Ref.logger:Lorg/slf4j/Logger;
getstatic org.apache.cassandra.utils.NoSpamLogger$Level.ERROR:Lorg/apache/cassandra/utils/NoSpamLogger$Level;
ldc 5
getstatic java.util.concurrent.TimeUnit.MINUTES:Ljava/util/concurrent/TimeUnit;
ldc "Could not fully check for self-referential leaks"
iconst_1
anewarray java.lang.Object
dup
iconst_0
aload 3 /* e */
aastore
invokestatic org.apache.cassandra.utils.NoSpamLogger.log:(Lorg/slf4j/Logger;Lorg/apache/cassandra/utils/NoSpamLogger$Level;JLjava/util/concurrent/TimeUnit;Ljava/lang/String;[Ljava/lang/Object;)Z
pop
end local 3 // java.lang.IllegalAccessException e
34: .line 571
StackMap locals:
StackMap stack:
aload 2 /* inProgress */
ifnonnull 3
aload 0 /* this */
getfield org.apache.cassandra.utils.concurrent.Ref$Visitor.path:Ljava/util/Deque;
invokeinterface java.util.Deque.isEmpty:()Z
ifeq 3
35: .line 620
return
end local 2 // org.apache.cassandra.utils.concurrent.Ref$InProgressVisit inProgress
end local 1 // org.apache.cassandra.utils.concurrent.RefCounted$Tidy rootObject
end local 0 // org.apache.cassandra.utils.concurrent.Ref$Visitor this
LocalVariableTable:
Start End Slot Name Signature
0 36 0 this Lorg/apache/cassandra/utils/concurrent/Ref$Visitor;
0 36 1 rootObject Lorg/apache/cassandra/utils/concurrent/RefCounted$Tidy;
2 36 2 inProgress Lorg/apache/cassandra/utils/concurrent/Ref$InProgressVisit;
6 32 3 p Lorg/apache/cassandra/utils/Pair<Ljava/lang/Object;Ljava/lang/reflect/Field;>;
7 32 4 child Ljava/lang/Object;
8 32 5 field Ljava/lang/reflect/Field;
33 34 3 e Ljava/lang/IllegalAccessException;
Exception table:
from to target type
5 15 32 Class java.lang.IllegalAccessException
16 31 32 Class java.lang.IllegalAccessException
MethodParameters:
Name Flags
rootObject final
}
SourceFile: "Ref.java"
NestHost: org.apache.cassandra.utils.concurrent.Ref
InnerClasses:
public final Level = org.apache.cassandra.utils.NoSpamLogger$Level of org.apache.cassandra.utils.NoSpamLogger
final GlobalState = org.apache.cassandra.utils.concurrent.Ref$GlobalState of org.apache.cassandra.utils.concurrent.Ref
InProgressVisit = org.apache.cassandra.utils.concurrent.Ref$InProgressVisit of org.apache.cassandra.utils.concurrent.Ref
Visitor = org.apache.cassandra.utils.concurrent.Ref$Visitor of org.apache.cassandra.utils.concurrent.Ref
public abstract Tidy = org.apache.cassandra.utils.concurrent.RefCounted$Tidy of org.apache.cassandra.utils.concurrent.RefCounted