public class org.apache.lucene.search.ControlledRealTimeReopenThread<T> extends java.lang.Thread implements java.io.Closeable
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.lucene.search.ControlledRealTimeReopenThread
  super_class: java.lang.Thread
{
  private final org.apache.lucene.search.ReferenceManager<T> manager;
    descriptor: Lorg/apache/lucene/search/ReferenceManager;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Lorg/apache/lucene/search/ReferenceManager<TT;>;

  private final long targetMaxStaleNS;
    descriptor: J
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final long targetMinStaleNS;
    descriptor: J
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final org.apache.lucene.index.IndexWriter writer;
    descriptor: Lorg/apache/lucene/index/IndexWriter;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private volatile boolean finish;
    descriptor: Z
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile long waitingGen;
    descriptor: J
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private volatile long searchingGen;
    descriptor: J
    flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE

  private long refreshStartGen;
    descriptor: J
    flags: (0x0002) ACC_PRIVATE

  private final java.util.concurrent.locks.ReentrantLock reopenLock;
    descriptor: Ljava/util/concurrent/locks/ReentrantLock;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final java.util.concurrent.locks.Condition reopenCond;
    descriptor: Ljava/util/concurrent/locks/Condition;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  public void <init>(org.apache.lucene.index.IndexWriter, org.apache.lucene.search.ReferenceManager<T>, double, );
    descriptor: (Lorg/apache/lucene/index/IndexWriter;Lorg/apache/lucene/search/ReferenceManager;DD)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=5
        start local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
        start local 1 // org.apache.lucene.index.IndexWriter writer
        start local 2 // org.apache.lucene.search.ReferenceManager manager
        start local 3 // double targetMaxStaleSec
        start local 5 // double targetMinStaleSec
         0: .line 67
            aload 0 /* this */
            invokespecial java.lang.Thread.<init>:()V
         1: .line 48
            aload 0 /* this */
            new java.util.concurrent.locks.ReentrantLock
            dup
            invokespecial java.util.concurrent.locks.ReentrantLock.<init>:()V
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
         2: .line 49
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.newCondition:()Ljava/util/concurrent/locks/Condition;
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenCond:Ljava/util/concurrent/locks/Condition;
         3: .line 68
            dload 3 /* targetMaxStaleSec */
            dload 5 /* targetMinStaleSec */
            dcmpg
            ifge 5
         4: .line 69
            new java.lang.IllegalArgumentException
            dup
            new java.lang.StringBuilder
            dup
            ldc "targetMaxScaleSec (= "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            dload 3 /* targetMaxStaleSec */
            invokevirtual java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;
            ldc ") < targetMinStaleSec (="
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            dload 5 /* targetMinStaleSec */
            invokevirtual java.lang.StringBuilder.append:(D)Ljava/lang/StringBuilder;
            ldc ")"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 71
      StackMap locals: org.apache.lucene.search.ControlledRealTimeReopenThread org.apache.lucene.index.IndexWriter org.apache.lucene.search.ReferenceManager double double
      StackMap stack:
            aload 0 /* this */
            aload 1 /* writer */
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.writer:Lorg/apache/lucene/index/IndexWriter;
         6: .line 72
            aload 0 /* this */
            aload 2 /* manager */
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.manager:Lorg/apache/lucene/search/ReferenceManager;
         7: .line 73
            aload 0 /* this */
            ldc 1.0E9
            dload 3 /* targetMaxStaleSec */
            dmul
            d2l
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.targetMaxStaleNS:J
         8: .line 74
            aload 0 /* this */
            ldc 1.0E9
            dload 5 /* targetMinStaleSec */
            dmul
            d2l
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.targetMinStaleNS:J
         9: .line 75
            aload 2 /* manager */
            new org.apache.lucene.search.ControlledRealTimeReopenThread$HandleRefresh
            dup
            aload 0 /* this */
            invokespecial org.apache.lucene.search.ControlledRealTimeReopenThread$HandleRefresh.<init>:(Lorg/apache/lucene/search/ControlledRealTimeReopenThread;)V
            invokevirtual org.apache.lucene.search.ReferenceManager.addListener:(Lorg/apache/lucene/search/ReferenceManager$RefreshListener;)V
        10: .line 76
            return
        end local 5 // double targetMinStaleSec
        end local 3 // double targetMaxStaleSec
        end local 2 // org.apache.lucene.search.ReferenceManager manager
        end local 1 // org.apache.lucene.index.IndexWriter writer
        end local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   11     0               this  Lorg/apache/lucene/search/ControlledRealTimeReopenThread<TT;>;
            0   11     1             writer  Lorg/apache/lucene/index/IndexWriter;
            0   11     2            manager  Lorg/apache/lucene/search/ReferenceManager<TT;>;
            0   11     3  targetMaxStaleSec  D
            0   11     5  targetMinStaleSec  D
    Signature: (Lorg/apache/lucene/index/IndexWriter;Lorg/apache/lucene/search/ReferenceManager<TT;>;DD)V
    MethodParameters:
                   Name  Flags
      writer             
      manager            
      targetMaxStaleSec  
      targetMinStaleSec  

  public synchronized void close();
    descriptor: ()V
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
         0: .line 100
            aload 0 /* this */
            iconst_1
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.finish:Z
         1: .line 103
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         2: .line 105
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenCond:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
         3: .line 106
            goto 7
      StackMap locals:
      StackMap stack: java.lang.Throwable
         4: astore 1
         5: .line 107
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         6: .line 108
            aload 1
            athrow
         7: .line 107
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         8: .line 111
            aload 0 /* this */
            invokevirtual org.apache.lucene.search.ControlledRealTimeReopenThread.join:()V
         9: .line 112
            goto 12
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
        10: astore 1 /* ie */
        start local 1 // java.lang.InterruptedException ie
        11: .line 113
            new org.apache.lucene.util.ThreadInterruptedException
            dup
            aload 1 /* ie */
            invokespecial org.apache.lucene.util.ThreadInterruptedException.<init>:(Ljava/lang/InterruptedException;)V
            athrow
        end local 1 // java.lang.InterruptedException ie
        12: .line 117
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            ldc 9223372036854775807
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.searchingGen:J
        13: .line 118
            aload 0 /* this */
            invokevirtual java.lang.Object.notifyAll:()V
        14: .line 119
            return
        end local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   15     0  this  Lorg/apache/lucene/search/ControlledRealTimeReopenThread<TT;>;
           11   12     1    ie  Ljava/lang/InterruptedException;
      Exception table:
        from    to  target  type
           2     4       4  any
           8     9      10  Class java.lang.InterruptedException

  public void waitForGeneration(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=2
        start local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
        start local 1 // long targetGen
         0: .line 132
            aload 0 /* this */
            lload 1 /* targetGen */
            iconst_m1
            invokevirtual org.apache.lucene.search.ControlledRealTimeReopenThread.waitForGeneration:(JI)Z
            pop
         1: .line 133
            return
        end local 1 // long targetGen
        end local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    2     0       this  Lorg/apache/lucene/search/ControlledRealTimeReopenThread<TT;>;
            0    2     1  targetGen  J
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
           Name  Flags
      targetGen  

  public synchronized boolean waitForGeneration(long, int);
    descriptor: (JI)Z
    flags: (0x0021) ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=6, locals=8, args_size=3
        start local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
        start local 1 // long targetGen
        start local 3 // int maxMS
         0: .line 155
            lload 1 /* targetGen */
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.searchingGen:J
            lcmp
            ifle 19
         1: .line 159
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         2: .line 163
            aload 0 /* this */
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.waitingGen:J
            lload 1 /* targetGen */
            invokestatic java.lang.Math.max:(JJ)J
            putfield org.apache.lucene.search.ControlledRealTimeReopenThread.waitingGen:J
         3: .line 166
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenCond:Ljava/util/concurrent/locks/Condition;
            invokeinterface java.util.concurrent.locks.Condition.signal:()V
         4: .line 167
            goto 8
      StackMap locals:
      StackMap stack: java.lang.Throwable
         5: astore 4
         6: .line 168
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         7: .line 169
            aload 4
            athrow
         8: .line 168
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
         9: .line 171
            invokestatic java.lang.System.nanoTime:()J
            ldc 1000000
            ldiv
            lstore 4 /* startMS */
        start local 4 // long startMS
        10: .line 173
            goto 18
        11: .line 174
      StackMap locals: long
      StackMap stack:
            iload 3 /* maxMS */
            ifge 14
        12: .line 175
            aload 0 /* this */
            invokevirtual java.lang.Object.wait:()V
        13: .line 176
            goto 18
        14: .line 177
      StackMap locals:
      StackMap stack:
            lload 4 /* startMS */
            iload 3 /* maxMS */
            i2l
            ladd
            invokestatic java.lang.System.nanoTime:()J
            ldc 1000000
            ldiv
            lsub
            lstore 6 /* msLeft */
        start local 6 // long msLeft
        15: .line 178
            lload 6 /* msLeft */
            lconst_0
            lcmp
            ifgt 17
        16: .line 179
            iconst_0
            ireturn
        17: .line 181
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            lload 6 /* msLeft */
            invokevirtual java.lang.Object.wait:(J)V
        end local 6 // long msLeft
        18: .line 173
      StackMap locals:
      StackMap stack:
            lload 1 /* targetGen */
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.searchingGen:J
            lcmp
            ifgt 11
        end local 4 // long startMS
        19: .line 187
      StackMap locals:
      StackMap stack:
            iconst_1
            ireturn
        end local 3 // int maxMS
        end local 1 // long targetGen
        end local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   20     0       this  Lorg/apache/lucene/search/ControlledRealTimeReopenThread<TT;>;
            0   20     1  targetGen  J
            0   20     3      maxMS  I
           10   19     4    startMS  J
           15   18     6     msLeft  J
      Exception table:
        from    to  target  type
           3     5       5  any
    Exceptions:
      throws java.lang.InterruptedException
    MethodParameters:
           Name  Flags
      targetGen  
      maxMS      

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=9, args_size=1
        start local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
         0: .line 194
            invokestatic java.lang.System.nanoTime:()J
            lstore 1 /* lastReopenStartNS */
        start local 1 // long lastReopenStartNS
         1: .line 197
            goto 31
         2: .line 207
      StackMap locals: long
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.lock:()V
         3: .line 210
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.waitingGen:J
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.searchingGen:J
            lcmp
            ifle 4
            iconst_1
            goto 5
      StackMap locals:
      StackMap stack:
         4: iconst_0
      StackMap locals:
      StackMap stack: int
         5: istore 3 /* hasWaiting */
        start local 3 // boolean hasWaiting
         6: .line 211
            lload 1 /* lastReopenStartNS */
            iload 3 /* hasWaiting */
            ifeq 7
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.targetMinStaleNS:J
            goto 8
      StackMap locals: org.apache.lucene.search.ControlledRealTimeReopenThread long int
      StackMap stack: long
         7: aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.targetMaxStaleNS:J
      StackMap locals: org.apache.lucene.search.ControlledRealTimeReopenThread long int
      StackMap stack: long long
         8: ladd
            lstore 4 /* nextReopenStartNS */
        start local 4 // long nextReopenStartNS
         9: .line 213
            lload 4 /* nextReopenStartNS */
            invokestatic java.lang.System.nanoTime:()J
            lsub
            lstore 6 /* sleepNS */
        start local 6 // long sleepNS
        10: .line 215
            lload 6 /* sleepNS */
            lconst_0
            lcmp
            ifle 13
        11: .line 216
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenCond:Ljava/util/concurrent/locks/Condition;
            lload 6 /* sleepNS */
            invokeinterface java.util.concurrent.locks.Condition.awaitNanos:(J)J
            pop2
        12: .line 217
            goto 22
        13: .line 224
      StackMap locals: long long
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        14: .line 218
            goto 24
        end local 6 // long sleepNS
        end local 4 // long nextReopenStartNS
        end local 3 // boolean hasWaiting
        15: .line 220
      StackMap locals: org.apache.lucene.search.ControlledRealTimeReopenThread long
      StackMap stack: java.lang.InterruptedException
            pop
        16: .line 221
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.interrupt:()V
        17: .line 224
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        18: .line 222
            return
        19: .line 223
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 8
        20: .line 224
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        21: .line 225
            aload 8
            athrow
        22: .line 224
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.reopenLock:Ljava/util/concurrent/locks/ReentrantLock;
            invokevirtual java.util.concurrent.locks.ReentrantLock.unlock:()V
        23: .line 204
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.finish:Z
            ifeq 2
        24: .line 228
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.finish:Z
            ifeq 26
        25: .line 229
            goto 32
        26: .line 232
      StackMap locals:
      StackMap stack:
            invokestatic java.lang.System.nanoTime:()J
            lstore 1 /* lastReopenStartNS */
        27: .line 234
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.manager:Lorg/apache/lucene/search/ReferenceManager;
            invokevirtual org.apache.lucene.search.ReferenceManager.maybeRefreshBlocking:()V
        28: .line 235
            goto 31
      StackMap locals:
      StackMap stack: java.io.IOException
        29: astore 3 /* ioe */
        start local 3 // java.io.IOException ioe
        30: .line 236
            new java.lang.RuntimeException
            dup
            aload 3 /* ioe */
            invokespecial java.lang.RuntimeException.<init>:(Ljava/lang/Throwable;)V
            athrow
        end local 3 // java.io.IOException ioe
        31: .line 197
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.finish:Z
            ifeq 23
        32: .line 239
      StackMap locals:
      StackMap stack:
            return
        end local 1 // long lastReopenStartNS
        end local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   33     0               this  Lorg/apache/lucene/search/ControlledRealTimeReopenThread<TT;>;
            1   33     1  lastReopenStartNS  J
            6   15     3         hasWaiting  Z
            9   15     4  nextReopenStartNS  J
           10   15     6            sleepNS  J
           30   31     3                ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           3    13      15  Class java.lang.InterruptedException
           3    13      19  any
          15    17      19  any
          27    28      29  Class java.io.IOException

  public long getSearchingGen();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
         0: .line 243
            aload 0 /* this */
            getfield org.apache.lucene.search.ControlledRealTimeReopenThread.searchingGen:J
            lreturn
        end local 0 // org.apache.lucene.search.ControlledRealTimeReopenThread this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/lucene/search/ControlledRealTimeReopenThread<TT;>;
}
Signature: <T:Ljava/lang/Object;>Ljava/lang/Thread;Ljava/io/Closeable;
SourceFile: "ControlledRealTimeReopenThread.java"
NestMembers:
  org.apache.lucene.search.ControlledRealTimeReopenThread$HandleRefresh
InnerClasses:
  private HandleRefresh = org.apache.lucene.search.ControlledRealTimeReopenThread$HandleRefresh of org.apache.lucene.search.ControlledRealTimeReopenThread
  public abstract RefreshListener = org.apache.lucene.search.ReferenceManager$RefreshListener of org.apache.lucene.search.ReferenceManager