public class org.jruby.util.io.SelectExecutor
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.jruby.util.io.SelectExecutor
  super_class: java.lang.Object
{
  private static org.jruby.RubyThread$Task<org.jruby.util.io.SelectExecutor, java.lang.Integer> SelectTask;
    descriptor: Lorg/jruby/RubyThread$Task;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Signature: Lorg/jruby/RubyThread$Task<Lorg/jruby/util/io/SelectExecutor;Ljava/lang/Integer;>;

  final org.jruby.runtime.builtin.IRubyObject read;
    descriptor: Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0010) ACC_FINAL

  final org.jruby.runtime.builtin.IRubyObject write;
    descriptor: Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0010) ACC_FINAL

  final org.jruby.runtime.builtin.IRubyObject except;
    descriptor: Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0010) ACC_FINAL

  java.util.List<java.nio.channels.SelectionKey> readKeyList;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Ljava/nio/channels/SelectionKey;>;

  java.util.List<java.nio.channels.SelectionKey> writeKeyList;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Ljava/nio/channels/SelectionKey;>;

  java.util.List<java.nio.channels.SelectionKey> errorKeyList;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Ljava/nio/channels/SelectionKey;>;

  java.util.List<org.jruby.util.io.ChannelFD> unselectableReadFDs;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Lorg/jruby/util/io/ChannelFD;>;

  java.util.List<org.jruby.util.io.ChannelFD> unselectableWriteFDs;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Lorg/jruby/util/io/ChannelFD;>;

  java.util.List<org.jruby.util.io.ChannelFD> pendingReadFDs;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Lorg/jruby/util/io/ChannelFD;>;

  java.nio.channels.Selector mainSelector;
    descriptor: Ljava/nio/channels/Selector;
    flags: (0x0000) 

  java.util.List<java.nio.channels.Selector> selectors;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Ljava/nio/channels/Selector;>;

  java.util.List<org.jruby.util.io.SelectExecutor$ENXIOSelector> enxioSelectors;
    descriptor: Ljava/util/List;
    flags: (0x0000) 
    Signature: Ljava/util/List<Lorg/jruby/util/io/SelectExecutor$ENXIOSelector;>;

  java.lang.Long timeout;
    descriptor: Ljava/lang/Long;
    flags: (0x0000) 

  final org.jruby.Ruby runtime;
    descriptor: Lorg/jruby/Ruby;
    flags: (0x0010) ACC_FINAL

  public static final int READ_ACCEPT_OPS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 17

  public static final int WRITE_CONNECT_OPS;
    descriptor: I
    flags: (0x0019) ACC_PUBLIC, ACC_STATIC, ACC_FINAL
    ConstantValue: 12

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 449
            new org.jruby.util.io.SelectExecutor$1
            dup
            invokespecial org.jruby.util.io.SelectExecutor$1.<init>:()V
            putstatic org.jruby.util.io.SelectExecutor.SelectTask:Lorg/jruby/RubyThread$Task;
         1: .line 570
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>(org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, org.jruby.runtime.builtin.IRubyObject, java.lang.Long);
    descriptor: (Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Lorg/jruby/runtime/builtin/IRubyObject;Ljava/lang/Long;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=5
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.builtin.IRubyObject read
        start local 2 // org.jruby.runtime.builtin.IRubyObject write
        start local 3 // org.jruby.runtime.builtin.IRubyObject except
        start local 4 // java.lang.Long timeout
         0: .line 32
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 562
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.io.SelectExecutor.mainSelector:Ljava/nio/channels/Selector;
         2: .line 563
            aload 0 /* this */
            aconst_null
            putfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
         3: .line 564
            aload 0 /* this */
            invokestatic java.util.Collections.emptyList:()Ljava/util/List;
            putfield org.jruby.util.io.SelectExecutor.enxioSelectors:Ljava/util/List;
         4: .line 33
            aload 0 /* this */
            aload 1 /* read */
            putfield org.jruby.util.io.SelectExecutor.read:Lorg/jruby/runtime/builtin/IRubyObject;
         5: .line 34
            aload 0 /* this */
            aload 2 /* write */
            putfield org.jruby.util.io.SelectExecutor.write:Lorg/jruby/runtime/builtin/IRubyObject;
         6: .line 35
            aload 0 /* this */
            aload 3 /* except */
            putfield org.jruby.util.io.SelectExecutor.except:Lorg/jruby/runtime/builtin/IRubyObject;
         7: .line 36
            aload 0 /* this */
            aload 4 /* timeout */
            putfield org.jruby.util.io.SelectExecutor.timeout:Ljava/lang/Long;
         8: .line 37
            aload 0 /* this */
            aload 1 /* read */
            invokeinterface org.jruby.runtime.builtin.IRubyObject.getRuntime:()Lorg/jruby/Ruby;
            putfield org.jruby.util.io.SelectExecutor.runtime:Lorg/jruby/Ruby;
         9: .line 38
            return
        end local 4 // java.lang.Long timeout
        end local 3 // org.jruby.runtime.builtin.IRubyObject except
        end local 2 // org.jruby.runtime.builtin.IRubyObject write
        end local 1 // org.jruby.runtime.builtin.IRubyObject read
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   10     0     this  Lorg/jruby/util/io/SelectExecutor;
            0   10     1     read  Lorg/jruby/runtime/builtin/IRubyObject;
            0   10     2    write  Lorg/jruby/runtime/builtin/IRubyObject;
            0   10     3   except  Lorg/jruby/runtime/builtin/IRubyObject;
            0   10     4  timeout  Ljava/lang/Long;
    MethodParameters:
         Name  Flags
      read     
      write    
      except   
      timeout  

  public org.jruby.runtime.builtin.IRubyObject go(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=5, args_size=2
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 42
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.util.io.SelectExecutor.selectCall:(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 4
         1: .line 46
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.util.io.SelectExecutor.selectEnd:(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         2: goto 4
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext top top org.jruby.runtime.builtin.IRubyObject
      StackMap stack: java.io.IOException
         3: pop
         4: .line 42
      StackMap locals:
      StackMap stack:
            aload 4
            areturn
         5: .line 43
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext
      StackMap stack: java.io.IOException
            astore 2 /* ioe */
        start local 2 // java.io.IOException ioe
         6: .line 44
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            aload 2 /* ioe */
            invokevirtual org.jruby.Ruby.newIOErrorFromException:(Ljava/io/IOException;)Lorg/jruby/exceptions/RaiseException;
            athrow
        end local 2 // java.io.IOException ioe
         7: .line 45
      StackMap locals:
      StackMap stack: java.lang.Throwable
            astore 3
         8: .line 46
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.util.io.SelectExecutor.selectEnd:(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
            pop
         9: goto 11
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext top java.lang.Throwable
      StackMap stack: java.io.IOException
        10: pop
        11: .line 47
      StackMap locals:
      StackMap stack:
            aload 3
            athrow
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   12     0     this  Lorg/jruby/util/io/SelectExecutor;
            0   12     1  context  Lorg/jruby/runtime/ThreadContext;
            6    7     2      ioe  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           1     2       3  Class java.io.IOException
           0     1       5  Class java.io.IOException
           0     1       7  any
           5     7       7  any
           8     9      10  Class java.io.IOException
    MethodParameters:
         Name  Flags
      context  

  org.jruby.runtime.builtin.IRubyObject selectCall(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0000) 
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 51
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.util.io.SelectExecutor.selectInternal:(Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    1     0     this  Lorg/jruby/util/io/SelectExecutor;
            0    1     1  context  Lorg/jruby/runtime/ThreadContext;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  

  org.jruby.runtime.builtin.IRubyObject selectEnd(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0000) 
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 55
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            ifnull 14
         1: .line 56
            iconst_0
            istore 2 /* i */
        start local 2 // int i
         2: goto 9
         3: .line 57
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            iload 2 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.nio.channels.Selector
            astore 3 /* selector */
        start local 3 // java.nio.channels.Selector selector
         4: .line 59
            aload 3 /* selector */
            invokevirtual java.nio.channels.Selector.provider:()Ljava/nio/channels/spi/SelectorProvider;
            invokestatic java.nio.channels.spi.SelectorProvider.provider:()Ljava/nio/channels/spi/SelectorProvider;
            if_acmpne 7
         5: .line 61
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.getSelectorPool:()Lorg/jruby/util/io/SelectorPool;
            aload 3 /* selector */
            invokevirtual org.jruby.util.io.SelectorPool.put:(Ljava/nio/channels/Selector;)V
         6: .line 62
            goto 8
         7: .line 63
      StackMap locals: java.nio.channels.Selector
      StackMap stack:
            aload 3 /* selector */
            invokevirtual java.nio.channels.Selector.close:()V
        end local 3 // java.nio.channels.Selector selector
         8: .line 56
      StackMap locals:
      StackMap stack:
            iinc 2 /* i */ 1
      StackMap locals:
      StackMap stack:
         9: iload 2 /* i */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            if_icmplt 3
        end local 2 // int i
        10: .line 68
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.enxioSelectors:Ljava/util/List;
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 3
            goto 13
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext top java.util.Iterator
      StackMap stack:
        11: aload 3
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.jruby.util.io.SelectExecutor$ENXIOSelector
            astore 2 /* enxioSelector */
        start local 2 // org.jruby.util.io.SelectExecutor$ENXIOSelector enxioSelector
        12: .line 69
            aload 2 /* enxioSelector */
            invokevirtual org.jruby.util.io.SelectExecutor$ENXIOSelector.cleanup:()V
        end local 2 // org.jruby.util.io.SelectExecutor$ENXIOSelector enxioSelector
        13: .line 68
      StackMap locals:
      StackMap stack:
            aload 3
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 11
        14: .line 97
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext
      StackMap stack:
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.nil:Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   15     0           this  Lorg/jruby/util/io/SelectExecutor;
            0   15     1        context  Lorg/jruby/runtime/ThreadContext;
            2   10     2              i  I
            4    8     3       selector  Ljava/nio/channels/Selector;
           12   13     2  enxioSelector  Lorg/jruby/util/io/SelectExecutor$ENXIOSelector;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  

  org.jruby.runtime.builtin.IRubyObject selectInternal(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)Lorg/jruby/runtime/builtin/IRubyObject;
    flags: (0x0000) 
    Code:
      stack=4, locals=15, args_size=2
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 101
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            astore 2 /* runtime */
        start local 2 // org.jruby.Ruby runtime
         1: .line 106
            aconst_null
            astore 8 /* readAry */
        start local 8 // org.jruby.RubyArray readAry
         2: .line 107
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.read:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 15
         3: .line 108
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.read:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.convertToArray:()Lorg/jruby/RubyArray;
            astore 8 /* readAry */
         4: .line 109
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
         5: goto 12
         6: .line 110
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top long org.jruby.RubyArray
      StackMap stack:
            aload 2 /* runtime */
            aload 8 /* readAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
         7: .line 111
            aload 0 /* this */
            aload 1 /* context */
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            aload 8 /* readAry */
            invokevirtual org.jruby.RubyArray.size:()I
            invokevirtual org.jruby.util.io.SelectExecutor.fdSetRead:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;I)V
         8: .line 112
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.READ_DATA_PENDING:()Z
            ifne 9
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.READ_CHAR_PENDING:()Z
            ifeq 11
         9: .line 113
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top org.jruby.util.io.OpenFile long org.jruby.RubyArray
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
            ifnonnull 10
            aload 0 /* this */
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            putfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
        10: .line 114
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        11: .line 109
      StackMap locals:
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top long org.jruby.RubyArray
      StackMap stack:
        12: lload 6 /* i */
            aload 8 /* readAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 6
        13: .line 117
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
            ifnonnull 14
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            ifnull 15
        14: .line 118
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            lconst_0
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            putfield org.jruby.util.io.SelectExecutor.timeout:Ljava/lang/Long;
        end local 6 // long i
        15: .line 122
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top top top org.jruby.RubyArray
      StackMap stack:
            aconst_null
            astore 9 /* writeAry */
        start local 9 // org.jruby.RubyArray writeAry
        16: .line 123
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.write:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 27
        17: .line 124
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.write:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.convertToArray:()Lorg/jruby/RubyArray;
            astore 9 /* writeAry */
        18: .line 125
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        19: goto 24
        20: .line 126
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top long org.jruby.RubyArray org.jruby.RubyArray
      StackMap stack:
            aload 2 /* runtime */
            aload 9 /* writeAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            invokevirtual org.jruby.RubyIO.GetWriteIO:()Lorg/jruby/RubyIO;
            astore 10 /* write_io */
        start local 10 // org.jruby.RubyIO write_io
        21: .line 127
            aload 10 /* write_io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        22: .line 128
            aload 0 /* this */
            aload 1 /* context */
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            aload 9 /* writeAry */
            invokevirtual org.jruby.RubyArray.size:()I
            invokevirtual org.jruby.util.io.SelectExecutor.fdSetWrite:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;I)V
        end local 10 // org.jruby.RubyIO write_io
        23: .line 125
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals:
      StackMap stack:
        24: lload 6 /* i */
            aload 9 /* writeAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 20
        25: .line 130
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            ifnull 27
        26: .line 131
            aload 0 /* this */
            lconst_0
            invokestatic java.lang.Long.valueOf:(J)Ljava/lang/Long;
            putfield org.jruby.util.io.SelectExecutor.timeout:Ljava/lang/Long;
        end local 6 // long i
        27: .line 135
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top top top org.jruby.RubyArray org.jruby.RubyArray
      StackMap stack:
            aconst_null
            astore 10 /* exceptAry */
        start local 10 // org.jruby.RubyArray exceptAry
        28: .line 136
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.except:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.isNil:()Z
            ifne 39
        29: .line 139
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.except:Lorg/jruby/runtime/builtin/IRubyObject;
            invokeinterface org.jruby.runtime.builtin.IRubyObject.convertToArray:()Lorg/jruby/RubyArray;
            astore 10 /* exceptAry */
        30: .line 140
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        31: goto 38
        32: .line 141
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray
      StackMap stack:
            aload 2 /* runtime */
            aload 10 /* exceptAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            astore 11 /* io */
        start local 11 // org.jruby.RubyIO io
        33: .line 142
            aload 11 /* io */
            invokevirtual org.jruby.RubyIO.GetWriteIO:()Lorg/jruby/RubyIO;
            astore 12 /* write_io */
        start local 12 // org.jruby.RubyIO write_io
        34: .line 143
            aload 11 /* io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        35: .line 144
            aload 11 /* io */
            aload 12 /* write_io */
            if_acmpeq 37
        36: .line 145
            aload 12 /* write_io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        end local 12 // org.jruby.RubyIO write_io
        end local 11 // org.jruby.RubyIO io
        37: .line 140
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top org.jruby.util.io.OpenFile long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray
      StackMap stack:
        38: lload 6 /* i */
            aload 10 /* exceptAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 32
        end local 6 // long i
        39: .line 150
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby top top top top top org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.util.io.SelectExecutor.threadFdSelect:(Lorg/jruby/runtime/ThreadContext;)I
            istore 11 /* n */
        start local 11 // int n
        40: .line 152
            iload 11 /* n */
            ifne 41
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
            ifnonnull 41
            iload 11 /* n */
            ifne 41
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            ifnonnull 41
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            ifnonnull 41
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.nil:Lorg/jruby/runtime/builtin/IRubyObject;
            areturn
        41: .line 154
      StackMap locals: int
      StackMap stack:
            aload 2 /* runtime */
            iconst_3
            invokestatic org.jruby.RubyArray.newArray:(Lorg/jruby/Ruby;I)Lorg/jruby/RubyArray;
            astore 3 /* res */
        start local 3 // org.jruby.RubyArray res
        42: .line 155
            aload 3 /* res */
            aload 2 /* runtime */
            iload 11 /* n */
            aload 0 /* this */
            invokevirtual org.jruby.util.io.SelectExecutor.maxReadReadySize:()I
            invokestatic java.lang.Math.min:(II)I
            invokevirtual org.jruby.Ruby.newArray:(I)Lorg/jruby/RubyArray;
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        43: .line 156
            aload 3 /* res */
            aload 2 /* runtime */
            iload 11 /* n */
            aload 0 /* this */
            invokevirtual org.jruby.util.io.SelectExecutor.maxWriteReadySize:()I
            invokestatic java.lang.Math.min:(II)I
            invokevirtual org.jruby.Ruby.newArray:(I)Lorg/jruby/RubyArray;
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        44: .line 158
            aload 3 /* res */
            aload 2 /* runtime */
            iconst_0
            invokevirtual org.jruby.Ruby.newArray:(I)Lorg/jruby/RubyArray;
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        45: .line 160
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            ifnull 56
        46: .line 161
            aload 3 /* res */
            lconst_0
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 4 /* list */
        start local 4 // org.jruby.RubyArray list
        47: .line 162
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        48: goto 55
        49: .line 163
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 8 /* readAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 12 /* obj */
        start local 12 // org.jruby.runtime.builtin.IRubyObject obj
        50: .line 164
            aload 2 /* runtime */
            aload 12 /* obj */
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            astore 13 /* io */
        start local 13 // org.jruby.RubyIO io
        51: .line 165
            aload 13 /* io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        52: .line 166
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            bipush 17
            invokevirtual org.jruby.util.io.SelectExecutor.fdIsSet:(Ljava/util/List;Lorg/jruby/util/io/ChannelFD;I)Z
            ifne 53
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
            ifnull 54
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.pendingReadFDs:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 54
        53: .line 167
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray org.jruby.util.io.OpenFile long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int org.jruby.runtime.builtin.IRubyObject org.jruby.RubyIO
      StackMap stack:
            aload 4 /* list */
            aload 12 /* obj */
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        end local 13 // org.jruby.RubyIO io
        end local 12 // org.jruby.runtime.builtin.IRubyObject obj
        54: .line 162
      StackMap locals:
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
        55: lload 6 /* i */
            aload 8 /* readAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 49
        end local 6 // long i
        end local 4 // org.jruby.RubyArray list
        56: .line 171
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray top top top top org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            ifnull 67
        57: .line 172
            aload 3 /* res */
            lconst_0
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 4 /* list */
        start local 4 // org.jruby.RubyArray list
        58: .line 173
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        59: goto 66
        60: .line 174
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 8 /* readAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 12 /* obj */
        start local 12 // org.jruby.runtime.builtin.IRubyObject obj
        61: .line 175
            aload 2 /* runtime */
            aload 12 /* obj */
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            astore 13 /* io */
        start local 13 // org.jruby.RubyIO io
        62: .line 176
            aload 13 /* io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        63: .line 177
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 65
        64: .line 178
            aload 4 /* list */
            aload 12 /* obj */
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        end local 13 // org.jruby.RubyIO io
        end local 12 // org.jruby.runtime.builtin.IRubyObject obj
        65: .line 173
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray org.jruby.util.io.OpenFile long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
        66: lload 6 /* i */
            aload 8 /* readAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 60
        end local 6 // long i
        end local 4 // org.jruby.RubyArray list
        67: .line 183
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray top top top top org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            ifnull 79
        68: .line 184
            aload 3 /* res */
            lconst_1
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 4 /* list */
        start local 4 // org.jruby.RubyArray list
        69: .line 185
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        70: goto 78
        71: .line 186
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 9 /* writeAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 12 /* obj */
        start local 12 // org.jruby.runtime.builtin.IRubyObject obj
        72: .line 187
            aload 2 /* runtime */
            aload 12 /* obj */
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            astore 13 /* io */
        start local 13 // org.jruby.RubyIO io
        73: .line 188
            aload 13 /* io */
            invokevirtual org.jruby.RubyIO.GetWriteIO:()Lorg/jruby/RubyIO;
            astore 14 /* write_io */
        start local 14 // org.jruby.RubyIO write_io
        74: .line 189
            aload 14 /* write_io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        75: .line 190
            aload 0 /* this */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            bipush 12
            invokevirtual org.jruby.util.io.SelectExecutor.fdIsSet:(Ljava/util/List;Lorg/jruby/util/io/ChannelFD;I)Z
            ifeq 77
        76: .line 191
            aload 4 /* list */
            aload 12 /* obj */
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        end local 14 // org.jruby.RubyIO write_io
        end local 13 // org.jruby.RubyIO io
        end local 12 // org.jruby.runtime.builtin.IRubyObject obj
        77: .line 185
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray org.jruby.util.io.OpenFile long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
        78: lload 6 /* i */
            aload 9 /* writeAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 71
        end local 6 // long i
        end local 4 // org.jruby.RubyArray list
        79: .line 195
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray top top top top org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            ifnull 90
        80: .line 196
            aload 3 /* res */
            lconst_1
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 4 /* list */
        start local 4 // org.jruby.RubyArray list
        81: .line 197
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        82: goto 89
        83: .line 198
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 9 /* writeAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 12 /* obj */
        start local 12 // org.jruby.runtime.builtin.IRubyObject obj
        84: .line 199
            aload 2 /* runtime */
            aload 12 /* obj */
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            astore 13 /* io */
        start local 13 // org.jruby.RubyIO io
        85: .line 200
            aload 13 /* io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        86: .line 201
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 88
        87: .line 202
            aload 4 /* list */
            aload 12 /* obj */
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        end local 13 // org.jruby.RubyIO io
        end local 12 // org.jruby.runtime.builtin.IRubyObject obj
        88: .line 197
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray org.jruby.util.io.OpenFile long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
        89: lload 6 /* i */
            aload 9 /* writeAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 83
        end local 6 // long i
        end local 4 // org.jruby.RubyArray list
        90: .line 207
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray top top top top org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.errorKeyList:Ljava/util/List;
            ifnull 107
        91: .line 208
            aload 3 /* res */
            ldc 2
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            checkcast org.jruby.RubyArray
            astore 4 /* list */
        start local 4 // org.jruby.RubyArray list
        92: .line 209
            lconst_0
            lstore 6 /* i */
        start local 6 // long i
        93: goto 106
        94: .line 210
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 10 /* exceptAry */
            lload 6 /* i */
            invokevirtual org.jruby.RubyArray.eltOk:(J)Lorg/jruby/runtime/builtin/IRubyObject;
            astore 12 /* obj */
        start local 12 // org.jruby.runtime.builtin.IRubyObject obj
        95: .line 211
            aload 2 /* runtime */
            aload 12 /* obj */
            invokestatic org.jruby.util.TypeConverter.ioGetIO:(Lorg/jruby/Ruby;Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyIO;
            astore 13 /* io */
        start local 13 // org.jruby.RubyIO io
        96: .line 212
            aload 13 /* io */
            invokevirtual org.jruby.RubyIO.GetWriteIO:()Lorg/jruby/RubyIO;
            astore 14 /* write_io */
        start local 14 // org.jruby.RubyIO write_io
        97: .line 213
            aload 13 /* io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
        start local 5 // org.jruby.util.io.OpenFile fptr
        98: .line 214
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.errorKeyList:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 101
        99: .line 215
            aload 4 /* list */
            aload 12 /* obj */
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
       100: .line 216
            goto 105
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray org.jruby.util.io.OpenFile long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int org.jruby.runtime.builtin.IRubyObject org.jruby.RubyIO org.jruby.RubyIO
      StackMap stack:
       101: aload 13 /* io */
            aload 14 /* write_io */
            if_acmpeq 105
       102: .line 217
            aload 14 /* write_io */
            invokevirtual org.jruby.RubyIO.getOpenFileChecked:()Lorg/jruby/util/io/OpenFile;
            astore 5 /* fptr */
       103: .line 218
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.errorKeyList:Ljava/util/List;
            aload 5 /* fptr */
            invokevirtual org.jruby.util.io.OpenFile.fd:()Lorg/jruby/util/io/ChannelFD;
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 105
       104: .line 219
            aload 4 /* list */
            aload 12 /* obj */
            invokevirtual org.jruby.RubyArray.push:(Lorg/jruby/runtime/builtin/IRubyObject;)Lorg/jruby/RubyArray;
            pop
        end local 14 // org.jruby.RubyIO write_io
        end local 13 // org.jruby.RubyIO io
        end local 12 // org.jruby.runtime.builtin.IRubyObject obj
       105: .line 209
      StackMap locals:
      StackMap stack:
            lload 6 /* i */
            lconst_1
            ladd
            lstore 6 /* i */
        end local 5 // org.jruby.util.io.OpenFile fptr
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray org.jruby.RubyArray top long org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
       106: lload 6 /* i */
            aload 10 /* exceptAry */
            invokevirtual org.jruby.RubyArray.size:()I
            i2l
            lcmp
            iflt 94
        end local 6 // long i
        end local 4 // org.jruby.RubyArray list
       107: .line 225
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext org.jruby.Ruby org.jruby.RubyArray top top top top org.jruby.RubyArray org.jruby.RubyArray org.jruby.RubyArray int
      StackMap stack:
            aload 3 /* res */
            areturn
        end local 11 // int n
        end local 10 // org.jruby.RubyArray exceptAry
        end local 9 // org.jruby.RubyArray writeAry
        end local 8 // org.jruby.RubyArray readAry
        end local 3 // org.jruby.RubyArray res
        end local 2 // org.jruby.Ruby runtime
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0  108     0       this  Lorg/jruby/util/io/SelectExecutor;
            0  108     1    context  Lorg/jruby/runtime/ThreadContext;
            1  108     2    runtime  Lorg/jruby/Ruby;
           42  108     3        res  Lorg/jruby/RubyArray;
           47   56     4       list  Lorg/jruby/RubyArray;
           58   67     4       list  Lorg/jruby/RubyArray;
           69   79     4       list  Lorg/jruby/RubyArray;
           81   90     4       list  Lorg/jruby/RubyArray;
           92  107     4       list  Lorg/jruby/RubyArray;
            7   12     5       fptr  Lorg/jruby/util/io/OpenFile;
           22   24     5       fptr  Lorg/jruby/util/io/OpenFile;
           35   38     5       fptr  Lorg/jruby/util/io/OpenFile;
           52   55     5       fptr  Lorg/jruby/util/io/OpenFile;
           63   66     5       fptr  Lorg/jruby/util/io/OpenFile;
           75   78     5       fptr  Lorg/jruby/util/io/OpenFile;
           86   89     5       fptr  Lorg/jruby/util/io/OpenFile;
           98  106     5       fptr  Lorg/jruby/util/io/OpenFile;
            5   15     6          i  J
           19   27     6          i  J
           31   39     6          i  J
           48   56     6          i  J
           59   67     6          i  J
           70   79     6          i  J
           82   90     6          i  J
           93  107     6          i  J
            2  108     8    readAry  Lorg/jruby/RubyArray;
           16  108     9   writeAry  Lorg/jruby/RubyArray;
           21   23    10   write_io  Lorg/jruby/RubyIO;
           28  108    10  exceptAry  Lorg/jruby/RubyArray;
           33   37    11         io  Lorg/jruby/RubyIO;
           34   37    12   write_io  Lorg/jruby/RubyIO;
           40  108    11          n  I
           50   54    12        obj  Lorg/jruby/runtime/builtin/IRubyObject;
           51   54    13         io  Lorg/jruby/RubyIO;
           61   65    12        obj  Lorg/jruby/runtime/builtin/IRubyObject;
           62   65    13         io  Lorg/jruby/RubyIO;
           72   77    12        obj  Lorg/jruby/runtime/builtin/IRubyObject;
           73   77    13         io  Lorg/jruby/RubyIO;
           74   77    14   write_io  Lorg/jruby/RubyIO;
           84   88    12        obj  Lorg/jruby/runtime/builtin/IRubyObject;
           85   88    13         io  Lorg/jruby/RubyIO;
           95  105    12        obj  Lorg/jruby/runtime/builtin/IRubyObject;
           96  105    13         io  Lorg/jruby/RubyIO;
           97  105    14   write_io  Lorg/jruby/RubyIO;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  

  private int maxReadReadySize();
    descriptor: ()I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.jruby.util.io.SelectExecutor this
         0: .line 229
            iconst_0
            istore 1 /* size */
        start local 1 // int size
         1: .line 230
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            ifnull 2
            iload 1 /* size */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iadd
            istore 1 /* size */
         2: .line 231
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            ifnull 3
            iload 1 /* size */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iadd
            istore 1 /* size */
         3: .line 232
      StackMap locals:
      StackMap stack:
            iload 1 /* size */
            ireturn
        end local 1 // int size
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/jruby/util/io/SelectExecutor;
            1    4     1  size  I

  private int maxWriteReadySize();
    descriptor: ()I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // org.jruby.util.io.SelectExecutor this
         0: .line 236
            iconst_0
            istore 1 /* size */
        start local 1 // int size
         1: .line 237
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            ifnull 2
            iload 1 /* size */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iadd
            istore 1 /* size */
         2: .line 238
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            ifnull 3
            iload 1 /* size */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            iadd
            istore 1 /* size */
         3: .line 239
      StackMap locals:
      StackMap stack:
            iload 1 /* size */
            ireturn
        end local 1 // int size
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/jruby/util/io/SelectExecutor;
            1    4     1  size  I

  private void fdSetRead(org.jruby.runtime.ThreadContext, org.jruby.util.io.ChannelFD, int);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.util.io.ChannelFD fd
        start local 3 // int maxSize
         0: .line 243
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            ifnonnull 4
         1: .line 245
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            ifnonnull 2
            aload 0 /* this */
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            putfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
         2: .line 246
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableReadFDs:Ljava/util/List;
            aload 2 /* fd */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         3: .line 247
            return
         4: .line 249
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* fd */
            invokevirtual org.jruby.util.io.SelectExecutor.trySelectRead:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;)Ljava/nio/channels/SelectionKey;
            astore 4 /* key */
        start local 4 // java.nio.channels.SelectionKey key
         5: .line 250
            aload 4 /* key */
            ifnonnull 6
            return
         6: .line 251
      StackMap locals: java.nio.channels.SelectionKey
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            ifnonnull 7
            aload 0 /* this */
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            putfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
         7: .line 252
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            aload 4 /* key */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         8: .line 253
            return
        end local 4 // java.nio.channels.SelectionKey key
        end local 3 // int maxSize
        end local 2 // org.jruby.util.io.ChannelFD fd
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lorg/jruby/util/io/SelectExecutor;
            0    9     1  context  Lorg/jruby/runtime/ThreadContext;
            0    9     2       fd  Lorg/jruby/util/io/ChannelFD;
            0    9     3  maxSize  I
            5    9     4      key  Ljava/nio/channels/SelectionKey;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
      fd       
      maxSize  

  private void fdSetWrite(org.jruby.runtime.ThreadContext, org.jruby.util.io.ChannelFD, int);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;I)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=5, args_size=4
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.util.io.ChannelFD fd
        start local 3 // int maxSize
         0: .line 256
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            ifnonnull 4
         1: .line 258
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            ifnonnull 2
            aload 0 /* this */
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            putfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
         2: .line 259
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.unselectableWriteFDs:Ljava/util/List;
            aload 2 /* fd */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         3: .line 260
            return
         4: .line 262
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* fd */
            invokevirtual org.jruby.util.io.SelectExecutor.trySelectWrite:(Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;)Ljava/nio/channels/SelectionKey;
            astore 4 /* key */
        start local 4 // java.nio.channels.SelectionKey key
         5: .line 263
            aload 4 /* key */
            ifnonnull 6
            return
         6: .line 264
      StackMap locals: java.nio.channels.SelectionKey
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            ifnonnull 7
            aload 0 /* this */
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            putfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
         7: .line 265
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            aload 4 /* key */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         8: .line 266
            return
        end local 4 // java.nio.channels.SelectionKey key
        end local 3 // int maxSize
        end local 2 // org.jruby.util.io.ChannelFD fd
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lorg/jruby/util/io/SelectExecutor;
            0    9     1  context  Lorg/jruby/runtime/ThreadContext;
            0    9     2       fd  Lorg/jruby/util/io/ChannelFD;
            0    9     3  maxSize  I
            5    9     4      key  Ljava/nio/channels/SelectionKey;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
      fd       
      maxSize  

  private boolean fdIsSet(java.util.List<java.nio.channels.SelectionKey>, org.jruby.util.io.ChannelFD, );
    descriptor: (Ljava/util/List;Lorg/jruby/util/io/ChannelFD;I)Z
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=2, locals=6, args_size=4
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // java.util.List fds
        start local 2 // org.jruby.util.io.ChannelFD fd
        start local 3 // int operations
         0: .line 269
            aload 1 /* fds */
            ifnonnull 1
            iconst_0
            ireturn
         1: .line 271
      StackMap locals:
      StackMap stack:
            aload 1 /* fds */
            invokeinterface java.util.List.iterator:()Ljava/util/Iterator;
            astore 5
            goto 4
      StackMap locals: org.jruby.util.io.SelectExecutor java.util.List org.jruby.util.io.ChannelFD int top java.util.Iterator
      StackMap stack:
         2: aload 5
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.nio.channels.SelectionKey
            astore 4 /* key */
        start local 4 // java.nio.channels.SelectionKey key
         3: .line 272
            aload 4 /* key */
            invokevirtual java.nio.channels.SelectionKey.isValid:()Z
            ifeq 4
            aload 4 /* key */
            invokevirtual java.nio.channels.SelectionKey.readyOps:()I
            iload 3 /* operations */
            iand
            ifeq 4
            aload 4 /* key */
            invokevirtual java.nio.channels.SelectionKey.attachment:()Ljava/lang/Object;
            checkcast java.util.List
            aload 2 /* fd */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifeq 4
            iconst_1
            ireturn
        end local 4 // java.nio.channels.SelectionKey key
         4: .line 271
      StackMap locals:
      StackMap stack:
            aload 5
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 2
         5: .line 274
            iconst_0
            ireturn
        end local 3 // int operations
        end local 2 // org.jruby.util.io.ChannelFD fd
        end local 1 // java.util.List fds
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    6     0        this  Lorg/jruby/util/io/SelectExecutor;
            0    6     1         fds  Ljava/util/List<Ljava/nio/channels/SelectionKey;>;
            0    6     2          fd  Lorg/jruby/util/io/ChannelFD;
            0    6     3  operations  I
            3    4     4         key  Ljava/nio/channels/SelectionKey;
    Signature: (Ljava/util/List<Ljava/nio/channels/SelectionKey;>;Lorg/jruby/util/io/ChannelFD;I)Z
    MethodParameters:
            Name  Flags
      fds         
      fd          
      operations  

  private java.nio.channels.SelectionKey trySelectRead(org.jruby.runtime.ThreadContext, org.jruby.util.io.ChannelFD);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;)Ljava/nio/channels/SelectionKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.util.io.ChannelFD fd
         0: .line 278
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            ifnull 2
         1: .line 279
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            invokevirtual org.jruby.util.io.SelectExecutor.getSelector:(Lorg/jruby/runtime/ThreadContext;Ljava/nio/channels/SelectableChannel;)Ljava/nio/channels/Selector;
            aload 2 /* fd */
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            bipush 17
            invokestatic org.jruby.util.io.SelectExecutor.registerSelect:(Ljava/nio/channels/Selector;Lorg/jruby/util/io/ChannelFD;Ljava/nio/channels/SelectableChannel;I)Ljava/nio/channels/SelectionKey;
            areturn
         2: .line 281
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 2 // org.jruby.util.io.ChannelFD fd
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/jruby/util/io/SelectExecutor;
            0    3     1  context  Lorg/jruby/runtime/ThreadContext;
            0    3     2       fd  Lorg/jruby/util/io/ChannelFD;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
      fd       

  private java.nio.channels.SelectionKey trySelectWrite(org.jruby.runtime.ThreadContext, org.jruby.util.io.ChannelFD);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Lorg/jruby/util/io/ChannelFD;)Ljava/nio/channels/SelectionKey;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=3, args_size=3
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // org.jruby.util.io.ChannelFD fd
         0: .line 285
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            ifnull 2
         1: .line 286
            aload 0 /* this */
            aload 1 /* context */
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            invokevirtual org.jruby.util.io.SelectExecutor.getSelector:(Lorg/jruby/runtime/ThreadContext;Ljava/nio/channels/SelectableChannel;)Ljava/nio/channels/Selector;
            aload 2 /* fd */
            aload 2 /* fd */
            getfield org.jruby.util.io.ChannelFD.chSelect:Ljava/nio/channels/SelectableChannel;
            bipush 12
            invokestatic org.jruby.util.io.SelectExecutor.registerSelect:(Ljava/nio/channels/Selector;Lorg/jruby/util/io/ChannelFD;Ljava/nio/channels/SelectableChannel;I)Ljava/nio/channels/SelectionKey;
            areturn
         2: .line 288
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 2 // org.jruby.util.io.ChannelFD fd
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/jruby/util/io/SelectExecutor;
            0    3     1  context  Lorg/jruby/runtime/ThreadContext;
            0    3     2       fd  Lorg/jruby/util/io/ChannelFD;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
      fd       

  private java.nio.channels.Selector getSelector(org.jruby.runtime.ThreadContext, java.nio.channels.SelectableChannel);
    descriptor: (Lorg/jruby/runtime/ThreadContext;Ljava/nio/channels/SelectableChannel;)Ljava/nio/channels/Selector;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=6, args_size=3
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
        start local 2 // java.nio.channels.SelectableChannel channel
         0: .line 292
            aconst_null
            astore 3 /* selector */
        start local 3 // java.nio.channels.Selector selector
         1: .line 294
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            ifnonnull 4
         2: .line 295
            aload 0 /* this */
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            putfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
         3: .line 296
            goto 12
         4: .line 297
      StackMap locals: java.nio.channels.Selector
      StackMap stack:
            iconst_0
            istore 4 /* i */
        start local 4 // int i
         5: goto 11
         6: .line 298
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            iload 4 /* i */
            invokeinterface java.util.List.get:(I)Ljava/lang/Object;
            checkcast java.nio.channels.Selector
            astore 5 /* sel */
        start local 5 // java.nio.channels.Selector sel
         7: .line 299
            aload 5 /* sel */
            invokevirtual java.nio.channels.Selector.provider:()Ljava/nio/channels/spi/SelectorProvider;
            aload 2 /* channel */
            invokevirtual java.nio.channels.SelectableChannel.provider:()Ljava/nio/channels/spi/SelectorProvider;
            if_acmpne 10
         8: .line 300
            aload 5 /* sel */
            astore 3 /* selector */
         9: .line 301
            goto 12
        end local 5 // java.nio.channels.Selector sel
        10: .line 297
      StackMap locals:
      StackMap stack:
            iinc 4 /* i */ 1
      StackMap locals:
      StackMap stack:
        11: iload 4 /* i */
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            invokeinterface java.util.List.size:()I
            if_icmplt 6
        end local 4 // int i
        12: .line 306
      StackMap locals:
      StackMap stack:
            aload 3 /* selector */
            ifnonnull 26
        13: .line 307
            aload 2 /* channel */
            invokevirtual java.nio.channels.SelectableChannel.provider:()Ljava/nio/channels/spi/SelectorProvider;
            instanceof jnr.enxio.channels.NativeSelectorProvider
            ifeq 22
        14: .line 309
            aload 2 /* channel */
            invokevirtual java.nio.channels.SelectableChannel.provider:()Ljava/nio/channels/spi/SelectorProvider;
            invokevirtual java.nio.channels.spi.SelectorProvider.openSelector:()Ljava/nio/channels/spi/AbstractSelector;
            astore 3 /* selector */
        15: .line 312
            invokestatic java.nio.channels.Pipe.open:()Ljava/nio/channels/Pipe;
            astore 4 /* pipe */
        start local 4 // java.nio.channels.Pipe pipe
        16: .line 313
            new org.jruby.util.io.SelectExecutor$ENXIOSelector
            dup
            aload 3 /* selector */
            aload 4 /* pipe */
            invokespecial org.jruby.util.io.SelectExecutor$ENXIOSelector.<init>:(Ljava/nio/channels/Selector;Ljava/nio/channels/Pipe;)V
            astore 5 /* enxioSelector */
        start local 5 // org.jruby.util.io.SelectExecutor$ENXIOSelector enxioSelector
        17: .line 314
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.enxioSelectors:Ljava/util/List;
            invokeinterface java.util.List.isEmpty:()Z
            ifeq 18
            aload 0 /* this */
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            putfield org.jruby.util.io.SelectExecutor.enxioSelectors:Ljava/util/List;
        18: .line 315
      StackMap locals: java.nio.channels.Pipe org.jruby.util.io.SelectExecutor$ENXIOSelector
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.enxioSelectors:Ljava/util/List;
            aload 5 /* enxioSelector */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        19: .line 316
            aload 4 /* pipe */
            invokevirtual java.nio.channels.Pipe.source:()Ljava/nio/channels/Pipe$SourceChannel;
            iconst_0
            invokevirtual java.nio.channels.Pipe$SourceChannel.configureBlocking:(Z)Ljava/nio/channels/SelectableChannel;
            pop
        20: .line 317
            aload 4 /* pipe */
            invokevirtual java.nio.channels.Pipe.source:()Ljava/nio/channels/Pipe$SourceChannel;
            aload 0 /* this */
            aload 1 /* context */
            aload 4 /* pipe */
            invokevirtual java.nio.channels.Pipe.source:()Ljava/nio/channels/Pipe$SourceChannel;
            invokevirtual org.jruby.util.io.SelectExecutor.getSelector:(Lorg/jruby/runtime/ThreadContext;Ljava/nio/channels/SelectableChannel;)Ljava/nio/channels/Selector;
            iconst_1
            aload 5 /* enxioSelector */
            invokevirtual java.nio.channels.Pipe$SourceChannel.register:(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;
            pop
        end local 5 // org.jruby.util.io.SelectExecutor$ENXIOSelector enxioSelector
        end local 4 // java.nio.channels.Pipe pipe
        21: .line 318
            goto 25
        22: .line 319
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.getSelectorPool:()Lorg/jruby/util/io/SelectorPool;
            invokevirtual org.jruby.util.io.SelectorPool.get:()Ljava/nio/channels/Selector;
            astore 3 /* selector */
        23: .line 321
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.mainSelector:Ljava/nio/channels/Selector;
            ifnonnull 25
        24: .line 322
            aload 0 /* this */
            aload 3 /* selector */
            putfield org.jruby.util.io.SelectExecutor.mainSelector:Ljava/nio/channels/Selector;
        25: .line 326
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.selectors:Ljava/util/List;
            aload 3 /* selector */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        26: .line 329
      StackMap locals:
      StackMap stack:
            aload 3 /* selector */
            areturn
        end local 3 // java.nio.channels.Selector selector
        end local 2 // java.nio.channels.SelectableChannel channel
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   27     0           this  Lorg/jruby/util/io/SelectExecutor;
            0   27     1        context  Lorg/jruby/runtime/ThreadContext;
            0   27     2        channel  Ljava/nio/channels/SelectableChannel;
            1   27     3       selector  Ljava/nio/channels/Selector;
            5   12     4              i  I
            7   10     5            sel  Ljava/nio/channels/Selector;
           16   21     4           pipe  Ljava/nio/channels/Pipe;
           17   21     5  enxioSelector  Lorg/jruby/util/io/SelectExecutor$ENXIOSelector;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  
      channel  

  private static java.nio.channels.SelectionKey registerSelect(java.nio.channels.Selector, org.jruby.util.io.ChannelFD, java.nio.channels.SelectableChannel, int);
    descriptor: (Ljava/nio/channels/Selector;Lorg/jruby/util/io/ChannelFD;Ljava/nio/channels/SelectableChannel;I)Ljava/nio/channels/SelectionKey;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=7, args_size=4
        start local 0 // java.nio.channels.Selector selector
        start local 1 // org.jruby.util.io.ChannelFD attachment
        start local 2 // java.nio.channels.SelectableChannel channel
        start local 3 // int ops
         0: .line 333
            aload 2 /* channel */
            iconst_0
            invokevirtual java.nio.channels.SelectableChannel.configureBlocking:(Z)Ljava/nio/channels/SelectableChannel;
            pop
         1: .line 335
            aload 2 /* channel */
            invokevirtual java.nio.channels.SelectableChannel.validOps:()I
            iload 3 /* ops */
            iand
            istore 4 /* real_ops */
        start local 4 // int real_ops
         2: .line 337
            aload 2 /* channel */
            aload 0 /* selector */
            invokevirtual java.nio.channels.SelectableChannel.keyFor:(Ljava/nio/channels/Selector;)Ljava/nio/channels/SelectionKey;
            astore 5 /* key */
        start local 5 // java.nio.channels.SelectionKey key
         3: .line 339
            aload 5 /* key */
            ifnull 8
         4: .line 340
            aload 5 /* key */
            aload 5 /* key */
            invokevirtual java.nio.channels.SelectionKey.interestOps:()I
            iload 4 /* real_ops */
            ior
            invokevirtual java.nio.channels.SelectionKey.interestOps:(I)Ljava/nio/channels/SelectionKey;
            pop
         5: .line 341
            aload 5 /* key */
            invokevirtual java.nio.channels.SelectionKey.attachment:()Ljava/lang/Object;
            checkcast java.util.List
            astore 6 /* attachmentSet */
        start local 6 // java.util.List attachmentSet
         6: .line 342
            aload 6 /* attachmentSet */
            aload 1 /* attachment */
            invokeinterface java.util.List.contains:(Ljava/lang/Object;)Z
            ifne 7
            aload 6 /* attachmentSet */
            aload 1 /* attachment */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
         7: .line 343
      StackMap locals: int java.nio.channels.SelectionKey java.util.List
      StackMap stack:
            aload 5 /* key */
            areturn
        end local 6 // java.util.List attachmentSet
         8: .line 345
      StackMap locals:
      StackMap stack:
            new java.util.ArrayList
            dup
            iconst_1
            invokespecial java.util.ArrayList.<init>:(I)V
            astore 6 /* attachmentSet */
        start local 6 // java.util.List attachmentSet
         9: .line 346
            aload 6 /* attachmentSet */
            aload 1 /* attachment */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        10: .line 347
            aload 2 /* channel */
            aload 0 /* selector */
            iload 4 /* real_ops */
            aload 6 /* attachmentSet */
            invokevirtual java.nio.channels.SelectableChannel.register:(Ljava/nio/channels/Selector;ILjava/lang/Object;)Ljava/nio/channels/SelectionKey;
            areturn
        end local 6 // java.util.List attachmentSet
        end local 5 // java.nio.channels.SelectionKey key
        end local 4 // int real_ops
        end local 3 // int ops
        end local 2 // java.nio.channels.SelectableChannel channel
        end local 1 // org.jruby.util.io.ChannelFD attachment
        end local 0 // java.nio.channels.Selector selector
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   11     0       selector  Ljava/nio/channels/Selector;
            0   11     1     attachment  Lorg/jruby/util/io/ChannelFD;
            0   11     2        channel  Ljava/nio/channels/SelectableChannel;
            0   11     3            ops  I
            2   11     4       real_ops  I
            3   11     5            key  Ljava/nio/channels/SelectionKey;
            6    8     6  attachmentSet  Ljava/util/List<Lorg/jruby/util/io/ChannelFD;>;
            9   11     6  attachmentSet  Ljava/util/List<Lorg/jruby/util/io/ChannelFD;>;
    Exceptions:
      throws java.io.IOException
    MethodParameters:
            Name  Flags
      selector    
      attachment  
      channel     
      ops         

  private int threadFdSelect(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=2, args_size=2
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 353
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.readKeyList:Ljava/util/List;
            ifnonnull 11
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.writeKeyList:Ljava/util/List;
            ifnonnull 11
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.errorKeyList:Ljava/util/List;
            ifnonnull 11
         1: .line 354
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.timeout:Ljava/lang/Long;
            ifnonnull 6
         2: .line 356
            aload 1 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.getThread:()Lorg/jruby/RubyThread;
            lconst_0
            invokevirtual org.jruby.RubyThread.sleep:(J)Z
            pop
         3: .line 357
            goto 5
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         4: pop
         5: .line 358
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
         6: .line 362
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.timeout:Ljava/lang/Long;
            invokevirtual java.lang.Long.longValue:()J
            lconst_0
            lcmp
            ifne 7
            iconst_0
            ireturn
         7: .line 365
      StackMap locals:
      StackMap stack:
            aload 1 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.getThread:()Lorg/jruby/RubyThread;
            aload 0 /* this */
            getfield org.jruby.util.io.SelectExecutor.timeout:Ljava/lang/Long;
            invokevirtual java.lang.Long.longValue:()J
            invokevirtual org.jruby.RubyThread.sleep:(J)Z
            pop
         8: .line 366
            goto 10
      StackMap locals:
      StackMap stack: java.lang.InterruptedException
         9: pop
        10: .line 367
      StackMap locals:
      StackMap stack:
            iconst_0
            ireturn
        11: .line 379
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* context */
            invokevirtual org.jruby.util.io.SelectExecutor.doSelect:(Lorg/jruby/runtime/ThreadContext;)I
            ireturn
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   12     0     this  Lorg/jruby/util/io/SelectExecutor;
            0   12     1  context  Lorg/jruby/runtime/ThreadContext;
      Exception table:
        from    to  target  type
           2     3       4  Class java.lang.InterruptedException
           7     8       9  Class java.lang.InterruptedException
    Exceptions:
      throws java.io.IOException
    MethodParameters:
         Name  Flags
      context  

  private int doSelect(org.jruby.runtime.ThreadContext);
    descriptor: (Lorg/jruby/runtime/ThreadContext;)I
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=4, args_size=2
        start local 0 // org.jruby.util.io.SelectExecutor this
        start local 1 // org.jruby.runtime.ThreadContext context
         0: .line 387
            aload 1 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.getThread:()Lorg/jruby/RubyThread;
            astore 3 /* th */
        start local 3 // org.jruby.RubyThread th
         1: .line 401
            aload 3 /* th */
            aload 1 /* context */
            aload 0 /* this */
            getstatic org.jruby.util.io.SelectExecutor.SelectTask:Lorg/jruby/RubyThread$Task;
            invokevirtual org.jruby.RubyThread.executeTask:(Lorg/jruby/runtime/ThreadContext;Ljava/lang/Object;Lorg/jruby/RubyThread$Task;)Ljava/lang/Object;
            checkcast java.lang.Integer
            invokevirtual java.lang.Integer.intValue:()I
            istore 2 /* result */
        start local 2 // int result
         2: .line 402
            goto 5
        end local 2 // int result
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext top org.jruby.RubyThread
      StackMap stack: java.lang.InterruptedException
         3: pop
         4: .line 403
            aload 1 /* context */
            getfield org.jruby.runtime.ThreadContext.runtime:Lorg/jruby/Ruby;
            invokevirtual org.jruby.Ruby.newErrnoEINTRError:()Lorg/jruby/exceptions/RaiseException;
            athrow
        start local 2 // int result
         5: .line 406
      StackMap locals: org.jruby.util.io.SelectExecutor org.jruby.runtime.ThreadContext int org.jruby.RubyThread
      StackMap stack:
            aload 1 /* context */
            invokevirtual org.jruby.runtime.ThreadContext.pollThreadEvents:()V
         6: .line 446
            iload 2 /* result */
            ireturn
        end local 3 // org.jruby.RubyThread th
        end local 2 // int result
        end local 1 // org.jruby.runtime.ThreadContext context
        end local 0 // org.jruby.util.io.SelectExecutor this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    7     0     this  Lorg/jruby/util/io/SelectExecutor;
            0    7     1  context  Lorg/jruby/runtime/ThreadContext;
            2    3     2   result  I
            5    7     2   result  I
            1    7     3       th  Lorg/jruby/RubyThread;
      Exception table:
        from    to  target  type
           1     2       3  Class java.lang.InterruptedException
    MethodParameters:
         Name  Flags
      context  
}
SourceFile: "SelectExecutor.java"
NestMembers:
  org.jruby.util.io.SelectExecutor$1  org.jruby.util.io.SelectExecutor$ENXIOSelector
InnerClasses:
  public abstract SourceChannel = java.nio.channels.Pipe$SourceChannel of java.nio.channels.Pipe
  public abstract Task = org.jruby.RubyThread$Task of org.jruby.RubyThread
  org.jruby.util.io.SelectExecutor$1
  private final ENXIOSelector = org.jruby.util.io.SelectExecutor$ENXIOSelector of org.jruby.util.io.SelectExecutor