class org.jruby.util.ShellLauncher$ChannelPumper extends java.lang.Thread implements org.jruby.util.ShellLauncher$Pumper
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: org.jruby.util.ShellLauncher$ChannelPumper
super_class: java.lang.Thread
{
private final java.nio.channels.FileChannel inChannel;
descriptor: Ljava/nio/channels/FileChannel;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.nio.channels.FileChannel outChannel;
descriptor: Ljava/nio/channels/FileChannel;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final org.jruby.util.ShellLauncher$Pumper$Slave slave;
descriptor: Lorg/jruby/util/ShellLauncher$Pumper$Slave;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final java.lang.Object sync;
descriptor: Ljava/lang/Object;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private volatile boolean quit;
descriptor: Z
flags: (0x0042) ACC_PRIVATE, ACC_VOLATILE
private final org.jruby.Ruby runtime;
descriptor: Lorg/jruby/Ruby;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private static volatile int[] $SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave;
descriptor: [I
flags: (0x104a) ACC_PRIVATE, ACC_STATIC, ACC_VOLATILE, ACC_SYNTHETIC
void <init>(org.jruby.Ruby, java.nio.channels.FileChannel, java.nio.channels.FileChannel, org.jruby.util.ShellLauncher$Pumper$Slave, java.lang.Object);
descriptor: (Lorg/jruby/Ruby;Ljava/nio/channels/FileChannel;Ljava/nio/channels/FileChannel;Lorg/jruby/util/ShellLauncher$Pumper$Slave;Ljava/lang/Object;)V
flags: (0x0000)
Code:
stack=2, locals=6, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 4 start local 5 0: aload 0
invokespecial java.lang.Thread.<init>:()V
1: aload 0
aload 2
putfield org.jruby.util.ShellLauncher$ChannelPumper.inChannel:Ljava/nio/channels/FileChannel;
2: aload 0
aload 3
putfield org.jruby.util.ShellLauncher$ChannelPumper.outChannel:Ljava/nio/channels/FileChannel;
3: aload 0
aload 4
putfield org.jruby.util.ShellLauncher$ChannelPumper.slave:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
4: aload 0
aload 5
putfield org.jruby.util.ShellLauncher$ChannelPumper.sync:Ljava/lang/Object;
5: aload 0
aload 1
putfield org.jruby.util.ShellLauncher$ChannelPumper.runtime:Lorg/jruby/Ruby;
6: aload 0
iconst_1
invokevirtual org.jruby.util.ShellLauncher$ChannelPumper.setDaemon:(Z)V
7: return
end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lorg/jruby/util/ShellLauncher$ChannelPumper;
0 8 1 runtime Lorg/jruby/Ruby;
0 8 2 inChannel Ljava/nio/channels/FileChannel;
0 8 3 outChannel Ljava/nio/channels/FileChannel;
0 8 4 slave Lorg/jruby/util/ShellLauncher$Pumper$Slave;
0 8 5 sync Ljava/lang/Object;
MethodParameters:
Name Flags
runtime
inChannel
outChannel
slave
sync
public void run();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=5, args_size=1
start local 0 0: aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.runtime:Lorg/jruby/Ruby;
invokevirtual org.jruby.Ruby.getCurrentContext:()Lorg/jruby/runtime/ThreadContext;
iconst_0
invokevirtual org.jruby.runtime.ThreadContext.setEventHooksEnabled:(Z)V
1: sipush 1024
invokestatic java.nio.ByteBuffer.allocateDirect:(I)Ljava/nio/ByteBuffer;
astore 1
start local 1 2: aload 1
invokestatic com.headius.backport9.buffer.Buffers.clearBuffer:(Ljava/nio/Buffer;)Ljava/nio/Buffer;
pop
3: goto 9
4: StackMap locals: java.nio.ByteBuffer
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.inChannel:Ljava/nio/channels/FileChannel;
aload 1
invokevirtual java.nio.channels.FileChannel.read:(Ljava/nio/ByteBuffer;)I
istore 2
start local 2 5: iload 2
iconst_m1
if_icmpne 6
goto 40
6: StackMap locals: int
StackMap stack:
aload 1
invokestatic com.headius.backport9.buffer.Buffers.flipBuffer:(Ljava/nio/Buffer;)Ljava/nio/Buffer;
pop
7: aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.outChannel:Ljava/nio/channels/FileChannel;
aload 1
invokevirtual java.nio.channels.FileChannel.write:(Ljava/nio/ByteBuffer;)I
pop
8: aload 1
invokestatic com.headius.backport9.buffer.Buffers.clearBuffer:(Ljava/nio/Buffer;)Ljava/nio/Buffer;
pop
end local 2 9: StackMap locals:
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.quit:Z
ifne 40
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.inChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.isOpen:()Z
ifeq 40
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.outChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.isOpen:()Z
ifne 4
10: goto 40
StackMap locals:
StackMap stack: java.lang.Exception
11: pop
12: aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.sync:Ljava/lang/Object;
dup
astore 4
monitorenter
13: invokestatic org.jruby.util.ShellLauncher$ChannelPumper.$SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave:()[I
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.slave:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
invokevirtual org.jruby.util.ShellLauncher$Pumper$Slave.ordinal:()I
iaload
tableswitch { // 1 - 2
1: 18
2: 14
default: 21
}
14: StackMap locals: org.jruby.util.ShellLauncher$ChannelPumper java.nio.ByteBuffer top top java.lang.Object
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.outChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.close:()V
15: goto 21
StackMap locals:
StackMap stack: java.io.IOException
16: pop
17: goto 21
18: StackMap locals:
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.inChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.close:()V
19: goto 21
StackMap locals:
StackMap stack: java.io.IOException
20: pop
21: StackMap locals:
StackMap stack:
aload 4
monitorexit
22: goto 53
StackMap locals:
StackMap stack: java.lang.Throwable
23: aload 4
monitorexit
24: athrow
25: StackMap locals: org.jruby.util.ShellLauncher$ChannelPumper java.nio.ByteBuffer
StackMap stack: java.lang.Throwable
astore 3
26: aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.sync:Ljava/lang/Object;
dup
astore 4
monitorenter
27: invokestatic org.jruby.util.ShellLauncher$ChannelPumper.$SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave:()[I
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.slave:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
invokevirtual org.jruby.util.ShellLauncher$Pumper$Slave.ordinal:()I
iaload
tableswitch { // 1 - 2
1: 32
2: 28
default: 35
}
28: StackMap locals: org.jruby.util.ShellLauncher$ChannelPumper java.nio.ByteBuffer top java.lang.Throwable java.lang.Object
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.outChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.close:()V
29: goto 35
StackMap locals:
StackMap stack: java.io.IOException
30: pop
31: goto 35
32: StackMap locals:
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.inChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.close:()V
33: goto 35
StackMap locals:
StackMap stack: java.io.IOException
34: pop
35: StackMap locals:
StackMap stack:
aload 4
monitorexit
36: goto 39
StackMap locals:
StackMap stack: java.lang.Throwable
37: aload 4
monitorexit
38: athrow
39: StackMap locals:
StackMap stack:
aload 3
athrow
40: StackMap locals: org.jruby.util.ShellLauncher$ChannelPumper java.nio.ByteBuffer
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.sync:Ljava/lang/Object;
dup
astore 4
monitorenter
41: invokestatic org.jruby.util.ShellLauncher$ChannelPumper.$SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave:()[I
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.slave:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
invokevirtual org.jruby.util.ShellLauncher$Pumper$Slave.ordinal:()I
iaload
tableswitch { // 1 - 2
1: 46
2: 42
default: 49
}
42: StackMap locals: org.jruby.util.ShellLauncher$ChannelPumper java.nio.ByteBuffer top top java.lang.Object
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.outChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.close:()V
43: goto 49
StackMap locals:
StackMap stack: java.io.IOException
44: pop
45: goto 49
46: StackMap locals:
StackMap stack:
aload 0
getfield org.jruby.util.ShellLauncher$ChannelPumper.inChannel:Ljava/nio/channels/FileChannel;
invokevirtual java.nio.channels.FileChannel.close:()V
47: goto 49
StackMap locals:
StackMap stack: java.io.IOException
48: pop
49: StackMap locals:
StackMap stack:
aload 4
monitorexit
50: goto 53
StackMap locals:
StackMap stack: java.lang.Throwable
51: aload 4
monitorexit
52: athrow
53: StackMap locals: org.jruby.util.ShellLauncher$ChannelPumper java.nio.ByteBuffer
StackMap stack:
return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 54 0 this Lorg/jruby/util/ShellLauncher$ChannelPumper;
2 54 1 buf Ljava/nio/ByteBuffer;
5 9 2 read I
Exception table:
from to target type
3 10 11 Class java.lang.Exception
14 15 16 Class java.io.IOException
18 19 20 Class java.io.IOException
13 22 23 any
23 24 23 any
3 12 25 any
28 29 30 Class java.io.IOException
32 33 34 Class java.io.IOException
27 36 37 any
37 38 37 any
42 43 44 Class java.io.IOException
46 47 48 Class java.io.IOException
41 50 51 any
51 52 51 any
public void quit();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=2, locals=1, args_size=1
start local 0 0: aload 0
iconst_1
putfield org.jruby.util.ShellLauncher$ChannelPumper.quit:Z
1: aload 0
invokevirtual org.jruby.util.ShellLauncher$ChannelPumper.interrupt:()V
2: return
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lorg/jruby/util/ShellLauncher$ChannelPumper;
static int[] $SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave();
descriptor: ()[I
flags: (0x1008) ACC_STATIC, ACC_SYNTHETIC
Code:
stack=3, locals=1, args_size=0
0: getstatic org.jruby.util.ShellLauncher$ChannelPumper.$SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave:[I
dup
ifnull 1
areturn
StackMap locals:
StackMap stack: int[]
1: pop
invokestatic org.jruby.util.ShellLauncher$Pumper$Slave.values:()[Lorg/jruby/util/ShellLauncher$Pumper$Slave;
arraylength
newarray 10
astore 0
2: aload 0
getstatic org.jruby.util.ShellLauncher$Pumper$Slave.IN:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
invokevirtual org.jruby.util.ShellLauncher$Pumper$Slave.ordinal:()I
iconst_1
iastore
3: goto 5
StackMap locals: int[]
StackMap stack: java.lang.NoSuchFieldError
4: pop
StackMap locals:
StackMap stack:
5: aload 0
getstatic org.jruby.util.ShellLauncher$Pumper$Slave.OUT:Lorg/jruby/util/ShellLauncher$Pumper$Slave;
invokevirtual org.jruby.util.ShellLauncher$Pumper$Slave.ordinal:()I
iconst_2
iastore
6: goto 8
StackMap locals:
StackMap stack: java.lang.NoSuchFieldError
7: pop
StackMap locals:
StackMap stack:
8: aload 0
dup
putstatic org.jruby.util.ShellLauncher$ChannelPumper.$SWITCH_TABLE$org$jruby$util$ShellLauncher$Pumper$Slave:[I
areturn
LocalVariableTable:
Start End Slot Name Signature
Exception table:
from to target type
2 3 4 Class java.lang.NoSuchFieldError
5 6 7 Class java.lang.NoSuchFieldError
}
SourceFile: "ShellLauncher.java"
NestHost: org.jruby.util.ShellLauncher
InnerClasses:
private ChannelPumper = org.jruby.util.ShellLauncher$ChannelPumper of org.jruby.util.ShellLauncher
private abstract Pumper = org.jruby.util.ShellLauncher$Pumper of org.jruby.util.ShellLauncher
public final Slave = org.jruby.util.ShellLauncher$Pumper$Slave of org.jruby.util.ShellLauncher$Pumper