class org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread
super_class: java.lang.Object
{
private final java.lang.Thread thread;
descriptor: Ljava/lang/Thread;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.lang.String requestUri;
descriptor: Ljava/lang/String;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final long start;
descriptor: J
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.concurrent.atomic.AtomicInteger state;
descriptor: Ljava/util/concurrent/atomic/AtomicInteger;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.util.concurrent.Semaphore interruptionSemaphore;
descriptor: Ljava/util/concurrent/Semaphore;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private boolean interrupted;
descriptor: Z
flags: (0x0002) ACC_PRIVATE
public void <init>(java.lang.Thread, java.lang.String, boolean);
descriptor: (Ljava/lang/Thread;Ljava/lang/String;Z)V
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=4, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new java.util.concurrent.atomic.AtomicInteger
dup
2: getstatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.RUNNING:Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.ordinal:()I
3: invokespecial java.util.concurrent.atomic.AtomicInteger.<init>:(I)V
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.state:Ljava/util/concurrent/atomic/AtomicInteger;
4: aload 0
aload 1
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.thread:Ljava/lang/Thread;
5: aload 0
aload 2
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.requestUri:Ljava/lang/String;
6: aload 0
invokestatic java.lang.System.currentTimeMillis:()J
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.start:J
7: iload 3
ifeq 10
8: aload 0
new java.util.concurrent.Semaphore
dup
iconst_1
invokespecial java.util.concurrent.Semaphore.<init>:(I)V
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
9: goto 11
10: StackMap locals: org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread java.lang.Thread java.lang.String int
StackMap stack:
aload 0
aconst_null
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
11: StackMap locals:
StackMap stack:
return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
0 12 1 thread Ljava/lang/Thread;
0 12 2 requestUri Ljava/lang/String;
0 12 3 interruptible Z
MethodParameters:
Name Flags
thread
requestUri
interruptible
public java.lang.Thread getThread();
descriptor: ()Ljava/lang/Thread;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.thread:Ljava/lang/Thread;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
public java.lang.String getRequestUri();
descriptor: ()Ljava/lang/String;
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.requestUri:Ljava/lang/String;
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
public long getActiveTimeInMillis();
descriptor: ()J
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
start local 0 0: invokestatic java.lang.System.currentTimeMillis:()J
aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.start:J
lsub
lreturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
public java.util.Date getStartTime();
descriptor: ()Ljava/util/Date;
flags: (0x0001) ACC_PUBLIC
Code:
stack=4, locals=1, args_size=1
start local 0 0: new java.util.Date
dup
aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.start:J
invokespecial java.util.Date.<init>:(J)V
areturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
public boolean markAsStuckIfStillRunning();
descriptor: ()Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=1, args_size=1
start local 0 0: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.state:Ljava/util/concurrent/atomic/AtomicInteger;
getstatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.RUNNING:Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.ordinal:()I
1: getstatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.STUCK:Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.ordinal:()I
2: invokevirtual java.util.concurrent.atomic.AtomicInteger.compareAndSet:(II)Z
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
public org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState markAsDone();
descriptor: ()Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
flags: (0x0001) ACC_PUBLIC
Code:
stack=3, locals=4, args_size=1
start local 0 0: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.state:Ljava/util/concurrent/atomic/AtomicInteger;
getstatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.DONE:Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.ordinal:()I
invokevirtual java.util.concurrent.atomic.AtomicInteger.getAndSet:(I)I
istore 1
start local 1 1: invokestatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.values:()[Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
iload 1
aaload
astore 2
start local 2 2: aload 2
getstatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.STUCK:Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
if_acmpne 11
3: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
ifnull 11
4: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
invokevirtual java.util.concurrent.Semaphore.acquire:()V
5: goto 11
StackMap locals: org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread int org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState
StackMap stack: java.lang.InterruptedException
6: astore 3
start local 3 7: getstatic org.apache.catalina.valves.StuckThreadDetectionValve.log:Lorg/apache/juli/logging/Log;
8: ldc "thread interrupted after the request is finished, ignoring"
9: aload 3
10: invokeinterface org.apache.juli.logging.Log.debug:(Ljava/lang/Object;Ljava/lang/Throwable;)V
end local 3 11: StackMap locals:
StackMap stack:
aload 2
areturn
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 12 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
1 12 1 val I
2 12 2 threadState Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
7 11 3 e Ljava/lang/InterruptedException;
Exception table:
from to target type
4 5 6 Class java.lang.InterruptedException
boolean isMarkedAsStuck();
descriptor: ()Z
flags: (0x0000)
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.state:Ljava/util/concurrent/atomic/AtomicInteger;
invokevirtual java.util.concurrent.atomic.AtomicInteger.get:()I
getstatic org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.STUCK:Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThreadState;
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState.ordinal:()I
if_icmpne 1
iconst_1
ireturn
StackMap locals:
StackMap stack:
1: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
public boolean interruptIfStuck(long);
descriptor: (J)Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=7, locals=6, args_size=2
start local 0 start local 1 0: aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.isMarkedAsStuck:()Z
ifeq 2
aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
ifnull 2
1: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
invokevirtual java.util.concurrent.Semaphore.tryAcquire:()Z
ifne 3
2: StackMap locals:
StackMap stack:
iconst_0
ireturn
3: StackMap locals:
StackMap stack:
getstatic org.apache.catalina.valves.StuckThreadDetectionValve.log:Lorg/apache/juli/logging/Log;
invokeinterface org.apache.juli.logging.Log.isWarnEnabled:()Z
ifeq 15
4: getstatic org.apache.catalina.valves.StuckThreadDetectionValve.sm:Lorg/apache/tomcat/util/res/StringManager;
5: ldc "stuckThreadDetectionValve.notifyStuckThreadInterrupted"
bipush 6
anewarray java.lang.Object
dup
iconst_0
6: aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.getThread:()Ljava/lang/Thread;
invokevirtual java.lang.Thread.getName:()Ljava/lang/String;
aastore
dup
iconst_1
7: aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.getActiveTimeInMillis:()J
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
aastore
dup
iconst_2
8: aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.getStartTime:()Ljava/util/Date;
aastore
dup
iconst_3
aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.getRequestUri:()Ljava/lang/String;
aastore
dup
iconst_4
9: lload 1
invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
aastore
dup
iconst_5
10: aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.getThread:()Ljava/lang/Thread;
invokevirtual java.lang.Thread.getId:()J
invokestatic java.lang.String.valueOf:(J)Ljava/lang/String;
aastore
11: invokevirtual org.apache.tomcat.util.res.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
astore 3
start local 3 12: new java.lang.Throwable
dup
invokespecial java.lang.Throwable.<init>:()V
astore 4
start local 4 13: aload 4
aload 0
invokevirtual org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.getThread:()Ljava/lang/Thread;
invokevirtual java.lang.Thread.getStackTrace:()[Ljava/lang/StackTraceElement;
invokevirtual java.lang.Throwable.setStackTrace:([Ljava/lang/StackTraceElement;)V
14: getstatic org.apache.catalina.valves.StuckThreadDetectionValve.log:Lorg/apache/juli/logging/Log;
aload 3
aload 4
invokeinterface org.apache.juli.logging.Log.warn:(Ljava/lang/Object;Ljava/lang/Throwable;)V
end local 4 end local 3 15: StackMap locals:
StackMap stack:
aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.thread:Ljava/lang/Thread;
invokevirtual java.lang.Thread.interrupt:()V
16: goto 21
StackMap locals:
StackMap stack: java.lang.Throwable
17: astore 5
18: aload 0
iconst_1
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interrupted:Z
19: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
invokevirtual java.util.concurrent.Semaphore.release:()V
20: aload 5
athrow
21: StackMap locals:
StackMap stack:
aload 0
iconst_1
putfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interrupted:Z
22: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interruptionSemaphore:Ljava/util/concurrent/Semaphore;
invokevirtual java.util.concurrent.Semaphore.release:()V
23: iconst_1
ireturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 24 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
0 24 1 interruptThreadThreshold J
12 15 3 msg Ljava/lang/String;
13 15 4 th Ljava/lang/Throwable;
Exception table:
from to target type
3 17 17 any
MethodParameters:
Name Flags
interruptThreadThreshold
public boolean wasInterrupted();
descriptor: ()Z
flags: (0x0001) ACC_PUBLIC
Code:
stack=1, locals=1, args_size=1
start local 0 0: aload 0
getfield org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread.interrupted:Z
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 1 0 this Lorg/apache/catalina/valves/StuckThreadDetectionValve$MonitoredThread;
}
SourceFile: "StuckThreadDetectionValve.java"
NestHost: org.apache.catalina.valves.StuckThreadDetectionValve
InnerClasses:
private MonitoredThread = org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThread of org.apache.catalina.valves.StuckThreadDetectionValve
private final MonitoredThreadState = org.apache.catalina.valves.StuckThreadDetectionValve$MonitoredThreadState of org.apache.catalina.valves.StuckThreadDetectionValve