class sun.nio.ch.Iocp$EventHandlerTask implements java.lang.Runnable
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: sun.nio.ch.Iocp$EventHandlerTask
  super_class: java.lang.Object
{
  final sun.nio.ch.Iocp this$0;
    descriptor: Lsun/nio/ch/Iocp;
    flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC

  private void <init>(sun.nio.ch.Iocp);
    descriptor: (Lsun/nio/ch/Iocp;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // sun.nio.ch.Iocp$EventHandlerTask this
         0: .line 305
            aload 0 /* this */
            aload 1
            putfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // sun.nio.ch.Iocp$EventHandlerTask this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lsun/nio/ch/Iocp$EventHandlerTask;
    MethodParameters:
        Name  Flags
      this$0  final

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=11, args_size=1
        start local 0 // sun.nio.ch.Iocp$EventHandlerTask this
         0: .line 308
            invokestatic sun.nio.ch.Invoker.getGroupAndInvokeCount:()Lsun/nio/ch/Invoker$GroupAndInvokeCount;
         1: .line 307
            astore 1 /* myGroupAndInvokeCount */
        start local 1 // sun.nio.ch.Invoker$GroupAndInvokeCount myGroupAndInvokeCount
         2: .line 309
            aload 1 /* myGroupAndInvokeCount */
            ifnull 3
            iconst_1
            goto 4
      StackMap locals: sun.nio.ch.Invoker$GroupAndInvokeCount
      StackMap stack:
         3: iconst_0
      StackMap locals:
      StackMap stack: int
         4: istore 2 /* canInvokeDirect */
        start local 2 // boolean canInvokeDirect
         5: .line 310
            new sun.nio.ch.Iocp$CompletionStatus
            dup
            invokespecial sun.nio.ch.Iocp$CompletionStatus.<init>:()V
            astore 3 /* ioResult */
        start local 3 // sun.nio.ch.Iocp$CompletionStatus ioResult
         6: .line 311
            iconst_0
            istore 4 /* replaceMe */
        start local 4 // boolean replaceMe
         7: .line 316
      StackMap locals: int sun.nio.ch.Iocp$CompletionStatus int
      StackMap stack:
            aload 1 /* myGroupAndInvokeCount */
            ifnull 9
         8: .line 317
            aload 1 /* myGroupAndInvokeCount */
            invokevirtual sun.nio.ch.Invoker$GroupAndInvokeCount.resetInvokeCount:()V
         9: .line 321
      StackMap locals:
      StackMap stack:
            iconst_0
            istore 4 /* replaceMe */
        10: .line 323
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            getfield sun.nio.ch.Iocp.port:J
            aload 3 /* ioResult */
            invokestatic sun.nio.ch.Iocp.getQueuedCompletionStatus:(JLsun/nio/ch/Iocp$CompletionStatus;)V
        11: .line 324
            goto 18
      StackMap locals:
      StackMap stack: java.io.IOException
        12: astore 5 /* x */
        start local 5 // java.io.IOException x
        13: .line 326
            aload 5 /* x */
            invokevirtual java.io.IOException.printStackTrace:()V
        14: .line 394
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            aload 0 /* this */
            iload 4 /* replaceMe */
            invokevirtual sun.nio.ch.Iocp.threadExit:(Ljava/lang/Runnable;Z)I
            istore 10 /* remaining */
        start local 10 // int remaining
        15: .line 395
            iload 10 /* remaining */
            ifne 17
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.isShutdown:()Z
            ifeq 17
        16: .line 396
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.implClose:()V
        end local 10 // int remaining
        17: .line 327
      StackMap locals: java.io.IOException
      StackMap stack:
            return
        end local 5 // java.io.IOException x
        18: .line 331
      StackMap locals:
      StackMap stack:
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.completionKey:()I
            ifne 29
        19: .line 332
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.overlapped:()J
            lconst_0
            lcmp
            ifne 29
        20: .line 334
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.pollTask:()Ljava/lang/Runnable;
            astore 5 /* task */
        start local 5 // java.lang.Runnable task
        21: .line 335
            aload 5 /* task */
            ifnonnull 26
        22: .line 394
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            aload 0 /* this */
            iload 4 /* replaceMe */
            invokevirtual sun.nio.ch.Iocp.threadExit:(Ljava/lang/Runnable;Z)I
            istore 10 /* remaining */
        start local 10 // int remaining
        23: .line 395
            iload 10 /* remaining */
            ifne 25
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.isShutdown:()Z
            ifeq 25
        24: .line 396
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.implClose:()V
        end local 10 // int remaining
        25: .line 337
      StackMap locals: java.lang.Runnable
      StackMap stack:
            return
        26: .line 342
      StackMap locals:
      StackMap stack:
            iconst_1
            istore 4 /* replaceMe */
        27: .line 343
            aload 5 /* task */
            invokeinterface java.lang.Runnable.run:()V
        28: .line 344
            goto 7
        end local 5 // java.lang.Runnable task
        29: .line 348
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 5 /* ch */
        start local 5 // sun.nio.ch.Iocp$OverlappedChannel ch
        30: .line 349
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            getfield sun.nio.ch.Iocp.keyToChannelLock:Ljava/util/concurrent/locks/ReadWriteLock;
            invokeinterface java.util.concurrent.locks.ReadWriteLock.readLock:()Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.lock:()V
        31: .line 351
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            getfield sun.nio.ch.Iocp.keyToChannel:Ljava/util/Map;
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.completionKey:()I
            invokestatic java.lang.Integer.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast sun.nio.ch.Iocp$OverlappedChannel
            astore 5 /* ch */
        32: .line 352
            aload 5 /* ch */
            ifnonnull 39
        33: .line 353
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.overlapped:()J
            invokevirtual sun.nio.ch.Iocp.checkIfStale:(J)V
        34: .line 357
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            getfield sun.nio.ch.Iocp.keyToChannelLock:Ljava/util/concurrent/locks/ReadWriteLock;
            invokeinterface java.util.concurrent.locks.ReadWriteLock.readLock:()Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        35: .line 354
            goto 7
        36: .line 356
      StackMap locals: sun.nio.ch.Iocp$EventHandlerTask sun.nio.ch.Invoker$GroupAndInvokeCount int sun.nio.ch.Iocp$CompletionStatus int sun.nio.ch.Iocp$OverlappedChannel
      StackMap stack: java.lang.Throwable
            astore 6
        37: .line 357
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            getfield sun.nio.ch.Iocp.keyToChannelLock:Ljava/util/concurrent/locks/ReadWriteLock;
            invokeinterface java.util.concurrent.locks.ReadWriteLock.readLock:()Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        38: .line 358
            aload 6
            athrow
        39: .line 357
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            getfield sun.nio.ch.Iocp.keyToChannelLock:Ljava/util/concurrent/locks/ReadWriteLock;
            invokeinterface java.util.concurrent.locks.ReadWriteLock.readLock:()Ljava/util/concurrent/locks/Lock;
            invokeinterface java.util.concurrent.locks.Lock.unlock:()V
        40: .line 361
            aload 5 /* ch */
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.overlapped:()J
            invokeinterface sun.nio.ch.Iocp$OverlappedChannel.getByOverlapped:(J)Lsun/nio/ch/PendingFuture;
            astore 6 /* result */
        start local 6 // sun.nio.ch.PendingFuture result
        41: .line 362
            aload 6 /* result */
            ifnonnull 44
        42: .line 369
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.overlapped:()J
            invokevirtual sun.nio.ch.Iocp.checkIfStale:(J)V
        43: .line 370
            goto 7
        44: .line 375
      StackMap locals: sun.nio.ch.PendingFuture
      StackMap stack:
            aload 6 /* result */
            dup
            astore 7
            monitorenter
        45: .line 376
            aload 6 /* result */
            invokevirtual sun.nio.ch.PendingFuture.isDone:()Z
            ifeq 48
        46: .line 377
            aload 7
            monitorexit
        47: goto 7
        48: .line 375
      StackMap locals: sun.nio.ch.PendingFuture
      StackMap stack:
            aload 7
            monitorexit
        49: goto 52
      StackMap locals:
      StackMap stack: java.lang.Throwable
        50: aload 7
            monitorexit
        51: athrow
        52: .line 383
      StackMap locals:
      StackMap stack:
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.error:()I
            istore 7 /* error */
        start local 7 // int error
        53: .line 384
            aload 6 /* result */
            invokevirtual sun.nio.ch.PendingFuture.getContext:()Ljava/lang/Object;
            checkcast sun.nio.ch.Iocp$ResultHandler
            astore 8 /* rh */
        start local 8 // sun.nio.ch.Iocp$ResultHandler rh
        54: .line 385
            iconst_1
            istore 4 /* replaceMe */
        55: .line 386
            iload 7 /* error */
            ifne 58
        56: .line 387
            aload 8 /* rh */
            aload 3 /* ioResult */
            invokevirtual sun.nio.ch.Iocp$CompletionStatus.bytesTransferred:()I
            iload 2 /* canInvokeDirect */
            invokeinterface sun.nio.ch.Iocp$ResultHandler.completed:(IZ)V
        57: .line 388
            goto 7
        58: .line 389
      StackMap locals: int sun.nio.ch.Iocp$ResultHandler
      StackMap stack:
            aload 8 /* rh */
            iload 7 /* error */
            iload 7 /* error */
            invokestatic sun.nio.ch.Iocp.translateErrorToIOException:(I)Ljava/io/IOException;
            invokeinterface sun.nio.ch.Iocp$ResultHandler.failed:(ILjava/io/IOException;)V
        end local 8 // sun.nio.ch.Iocp$ResultHandler rh
        end local 7 // int error
        end local 6 // sun.nio.ch.PendingFuture result
        end local 5 // sun.nio.ch.Iocp$OverlappedChannel ch
        59: .line 314
            goto 7
        60: .line 392
      StackMap locals: sun.nio.ch.Iocp$EventHandlerTask sun.nio.ch.Invoker$GroupAndInvokeCount int sun.nio.ch.Iocp$CompletionStatus int
      StackMap stack: java.lang.Throwable
            astore 9
        61: .line 394
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            aload 0 /* this */
            iload 4 /* replaceMe */
            invokevirtual sun.nio.ch.Iocp.threadExit:(Ljava/lang/Runnable;Z)I
            istore 10 /* remaining */
        start local 10 // int remaining
        62: .line 395
            iload 10 /* remaining */
            ifne 64
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.isShutdown:()Z
            ifeq 64
        63: .line 396
            aload 0 /* this */
            getfield sun.nio.ch.Iocp$EventHandlerTask.this$0:Lsun/nio/ch/Iocp;
            invokevirtual sun.nio.ch.Iocp.implClose:()V
        end local 10 // int remaining
        64: .line 398
      StackMap locals: sun.nio.ch.Iocp$EventHandlerTask sun.nio.ch.Invoker$GroupAndInvokeCount int sun.nio.ch.Iocp$CompletionStatus int top top top top java.lang.Throwable
      StackMap stack:
            aload 9
            athrow
        end local 4 // boolean replaceMe
        end local 3 // sun.nio.ch.Iocp$CompletionStatus ioResult
        end local 2 // boolean canInvokeDirect
        end local 1 // sun.nio.ch.Invoker$GroupAndInvokeCount myGroupAndInvokeCount
        end local 0 // sun.nio.ch.Iocp$EventHandlerTask this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   65     0                   this  Lsun/nio/ch/Iocp$EventHandlerTask;
            2   65     1  myGroupAndInvokeCount  Lsun/nio/ch/Invoker$GroupAndInvokeCount;
            5   65     2        canInvokeDirect  Z
            6   65     3               ioResult  Lsun/nio/ch/Iocp$CompletionStatus;
            7   65     4              replaceMe  Z
           13   18     5                      x  Ljava/io/IOException;
           21   29     5                   task  Ljava/lang/Runnable;
           30   59     5                     ch  Lsun/nio/ch/Iocp$OverlappedChannel;
           41   59     6                 result  Lsun/nio/ch/PendingFuture<**>;
           53   59     7                  error  I
           54   59     8                     rh  Lsun/nio/ch/Iocp$ResultHandler;
           15   17    10              remaining  I
           23   25    10              remaining  I
           62   64    10              remaining  I
      Exception table:
        from    to  target  type
          10    11      12  Class java.io.IOException
          31    34      36  any
          45    47      50  any
          48    49      50  any
          50    51      50  any
           7    14      60  any
          18    22      60  any
          26    60      60  any
}
SourceFile: "Iocp.java"
NestHost: sun.nio.ch.Iocp
InnerClasses:
  GroupAndInvokeCount = sun.nio.ch.Invoker$GroupAndInvokeCount of sun.nio.ch.Invoker
  private CompletionStatus = sun.nio.ch.Iocp$CompletionStatus of sun.nio.ch.Iocp
  private EventHandlerTask = sun.nio.ch.Iocp$EventHandlerTask of sun.nio.ch.Iocp
  abstract OverlappedChannel = sun.nio.ch.Iocp$OverlappedChannel of sun.nio.ch.Iocp
  abstract ResultHandler = sun.nio.ch.Iocp$ResultHandler of sun.nio.ch.Iocp