public class org.apache.catalina.valves.SemaphoreValve extends org.apache.catalina.valves.ValveBase
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.catalina.valves.SemaphoreValve
  super_class: org.apache.catalina.valves.ValveBase
{
  protected java.util.concurrent.Semaphore semaphore;
    descriptor: Ljava/util/concurrent/Semaphore;
    flags: (0x0004) ACC_PROTECTED

  protected int concurrency;
    descriptor: I
    flags: (0x0004) ACC_PROTECTED

  protected boolean fairness;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected boolean block;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  protected boolean interruptible;
    descriptor: Z
    flags: (0x0004) ACC_PROTECTED

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 44
            aload 0 /* this */
            iconst_1
            invokespecial org.apache.catalina.valves.ValveBase.<init>:(Z)V
         1: .line 53
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
         2: .line 62
            aload 0 /* this */
            bipush 10
            putfield org.apache.catalina.valves.SemaphoreValve.concurrency:I
         3: .line 70
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.valves.SemaphoreValve.fairness:Z
         4: .line 78
            aload 0 /* this */
            iconst_1
            putfield org.apache.catalina.valves.SemaphoreValve.block:Z
         5: .line 86
            aload 0 /* this */
            iconst_0
            putfield org.apache.catalina.valves.SemaphoreValve.interruptible:Z
         6: .line 45
            return
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    7     0  this  Lorg/apache/catalina/valves/SemaphoreValve;

  public int getConcurrency();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 63
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.concurrency:I
            ireturn
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/valves/SemaphoreValve;

  public void setConcurrency(int);
    descriptor: (I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // int concurrency
         0: .line 64
            aload 0 /* this */
            iload 1 /* concurrency */
            putfield org.apache.catalina.valves.SemaphoreValve.concurrency:I
            return
        end local 1 // int concurrency
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot         Name  Signature
            0    1     0         this  Lorg/apache/catalina/valves/SemaphoreValve;
            0    1     1  concurrency  I
    MethodParameters:
             Name  Flags
      concurrency  

  public boolean getFairness();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 71
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.fairness:Z
            ireturn
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/valves/SemaphoreValve;

  public void setFairness(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // boolean fairness
         0: .line 72
            aload 0 /* this */
            iload 1 /* fairness */
            putfield org.apache.catalina.valves.SemaphoreValve.fairness:Z
            return
        end local 1 // boolean fairness
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/apache/catalina/valves/SemaphoreValve;
            0    1     1  fairness  Z
    MethodParameters:
          Name  Flags
      fairness  

  public boolean getBlock();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 79
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.block:Z
            ireturn
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/valves/SemaphoreValve;

  public void setBlock(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // boolean block
         0: .line 80
            aload 0 /* this */
            iload 1 /* block */
            putfield org.apache.catalina.valves.SemaphoreValve.block:Z
            return
        end local 1 // boolean block
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot   Name  Signature
            0    1     0   this  Lorg/apache/catalina/valves/SemaphoreValve;
            0    1     1  block  Z
    MethodParameters:
       Name  Flags
      block  

  public boolean getInterruptible();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 87
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.interruptible:Z
            ireturn
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/catalina/valves/SemaphoreValve;

  public void setInterruptible(boolean);
    descriptor: (Z)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // boolean interruptible
         0: .line 88
            aload 0 /* this */
            iload 1 /* interruptible */
            putfield org.apache.catalina.valves.SemaphoreValve.interruptible:Z
            return
        end local 1 // boolean interruptible
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    1     0           this  Lorg/apache/catalina/valves/SemaphoreValve;
            0    1     1  interruptible  Z
    MethodParameters:
               Name  Flags
      interruptible  

  protected synchronized void startInternal();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=5, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 101
            aload 0 /* this */
            new java.util.concurrent.Semaphore
            dup
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.concurrency:I
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.fairness:Z
            invokespecial java.util.concurrent.Semaphore.<init>:(IZ)V
            putfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
         1: .line 103
            aload 0 /* this */
            getstatic org.apache.catalina.LifecycleState.STARTING:Lorg/apache/catalina/LifecycleState;
            invokevirtual org.apache.catalina.valves.SemaphoreValve.setState:(Lorg/apache/catalina/LifecycleState;)V
         2: .line 104
            return
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/catalina/valves/SemaphoreValve;
    Exceptions:
      throws org.apache.catalina.LifecycleException

  protected synchronized void stopInternal();
    descriptor: ()V
    flags: (0x0024) ACC_PROTECTED, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
         0: .line 117
            aload 0 /* this */
            getstatic org.apache.catalina.LifecycleState.STOPPING:Lorg/apache/catalina/LifecycleState;
            invokevirtual org.apache.catalina.valves.SemaphoreValve.setState:(Lorg/apache/catalina/LifecycleState;)V
         1: .line 119
            aload 0 /* this */
            aconst_null
            putfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
         2: .line 120
            return
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    3     0  this  Lorg/apache/catalina/valves/SemaphoreValve;
    Exceptions:
      throws org.apache.catalina.LifecycleException

  public void invoke(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response);
    descriptor: (Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // org.apache.catalina.connector.Response response
         0: .line 138
            aload 0 /* this */
            aload 1 /* request */
            aload 2 /* response */
            invokevirtual org.apache.catalina.valves.SemaphoreValve.controlConcurrency:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)Z
            ifeq 29
         1: .line 139
            iconst_1
            istore 3 /* shouldRelease */
        start local 3 // boolean shouldRelease
         2: .line 141
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.block:Z
            ifeq 14
         3: .line 142
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.interruptible:Z
            ifeq 12
         4: .line 144
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.acquire:()V
         5: .line 145
            goto 20
      StackMap locals: org.apache.catalina.valves.SemaphoreValve org.apache.catalina.connector.Request org.apache.catalina.connector.Response int
      StackMap stack: java.lang.InterruptedException
         6: pop
         7: .line 146
            iconst_0
            istore 3 /* shouldRelease */
         8: .line 147
            aload 0 /* this */
            aload 1 /* request */
            aload 2 /* response */
            invokevirtual org.apache.catalina.valves.SemaphoreValve.permitDenied:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
         9: .line 162
            iload 3 /* shouldRelease */
            ifeq 11
        10: .line 163
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.release:()V
        11: .line 148
      StackMap locals:
      StackMap stack:
            return
        12: .line 151
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.acquireUninterruptibly:()V
        13: .line 153
            goto 20
        14: .line 154
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.tryAcquire:()Z
            ifne 20
        15: .line 155
            iconst_0
            istore 3 /* shouldRelease */
        16: .line 156
            aload 0 /* this */
            aload 1 /* request */
            aload 2 /* response */
            invokevirtual org.apache.catalina.valves.SemaphoreValve.permitDenied:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
        17: .line 162
            iload 3 /* shouldRelease */
            ifeq 19
        18: .line 163
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.release:()V
        19: .line 157
      StackMap locals:
      StackMap stack:
            return
        20: .line 160
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.valves.SemaphoreValve.getNext:()Lorg/apache/catalina/Valve;
            aload 1 /* request */
            aload 2 /* response */
            invokeinterface org.apache.catalina.Valve.invoke:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
        21: .line 161
            goto 26
      StackMap locals:
      StackMap stack: java.lang.Throwable
        22: astore 4
        23: .line 162
            iload 3 /* shouldRelease */
            ifeq 25
        24: .line 163
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.release:()V
        25: .line 165
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 4
            athrow
        26: .line 162
      StackMap locals:
      StackMap stack:
            iload 3 /* shouldRelease */
            ifeq 30
        27: .line 163
            aload 0 /* this */
            getfield org.apache.catalina.valves.SemaphoreValve.semaphore:Ljava/util/concurrent/Semaphore;
            invokevirtual java.util.concurrent.Semaphore.release:()V
        end local 3 // boolean shouldRelease
        28: .line 166
            goto 30
        29: .line 167
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            invokevirtual org.apache.catalina.valves.SemaphoreValve.getNext:()Lorg/apache/catalina/Valve;
            aload 1 /* request */
            aload 2 /* response */
            invokeinterface org.apache.catalina.Valve.invoke:(Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
        30: .line 170
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.apache.catalina.connector.Response response
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   31     0           this  Lorg/apache/catalina/valves/SemaphoreValve;
            0   31     1        request  Lorg/apache/catalina/connector/Request;
            0   31     2       response  Lorg/apache/catalina/connector/Response;
            2   28     3  shouldRelease  Z
      Exception table:
        from    to  target  type
           4     5       6  Class java.lang.InterruptedException
           2     9      22  any
          12    17      22  any
          20    22      22  any
    Exceptions:
      throws java.io.IOException, jakarta.servlet.ServletException
    MethodParameters:
          Name  Flags
      request   
      response  

  public boolean controlConcurrency(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response);
    descriptor: (Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=3, args_size=3
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // org.apache.catalina.connector.Response response
         0: .line 181
            iconst_1
            ireturn
        end local 2 // org.apache.catalina.connector.Response response
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/apache/catalina/valves/SemaphoreValve;
            0    1     1   request  Lorg/apache/catalina/connector/Request;
            0    1     2  response  Lorg/apache/catalina/connector/Response;
    MethodParameters:
          Name  Flags
      request   
      response  

  public void permitDenied(org.apache.catalina.connector.Request, org.apache.catalina.connector.Response);
    descriptor: (Lorg/apache/catalina/connector/Request;Lorg/apache/catalina/connector/Response;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=3, args_size=3
        start local 0 // org.apache.catalina.valves.SemaphoreValve this
        start local 1 // org.apache.catalina.connector.Request request
        start local 2 // org.apache.catalina.connector.Response response
         0: .line 196
            return
        end local 2 // org.apache.catalina.connector.Response response
        end local 1 // org.apache.catalina.connector.Request request
        end local 0 // org.apache.catalina.valves.SemaphoreValve this
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            0    1     0      this  Lorg/apache/catalina/valves/SemaphoreValve;
            0    1     1   request  Lorg/apache/catalina/connector/Request;
            0    1     2  response  Lorg/apache/catalina/connector/Response;
    Exceptions:
      throws java.io.IOException, jakarta.servlet.ServletException
    MethodParameters:
          Name  Flags
      request   
      response  
}
SourceFile: "SemaphoreValve.java"