public class org.fusesource.hawtdispatch.internal.NioManager extends java.lang.Object
{
final org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy selectStrategy;
private java.nio.channels.Selector selector;
protected final java.util.concurrent.atomic.AtomicInteger wakeupCounter;
protected volatile int selectCounter;
private final java.util.concurrent.atomic.AtomicInteger registeredKeys;
protected volatile boolean selecting;
private final boolean TRACE;
private final java.util.LinkedList traces;
public void <init>() throws java.io.IOException
{
java.nio.channels.Selector v;
org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy v, v;
org.fusesource.hawtdispatch.internal.NioManager$WorkAroundSelectSpin v;
org.fusesource.hawtdispatch.internal.NioManager v;
java.util.concurrent.atomic.AtomicInteger v, v;
java.util.LinkedList v;
boolean v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
specialinvoke v.<java.lang.Object: void <init>()>();
v = staticinvoke <java.lang.Boolean: boolean getBoolean(java.lang.String)>("hawtdispatch.workaround-select-spin");
if v == 0 goto label;
v = new org.fusesource.hawtdispatch.internal.NioManager$WorkAroundSelectSpin;
v = v;
specialinvoke v.<org.fusesource.hawtdispatch.internal.NioManager$WorkAroundSelectSpin: void <init>(org.fusesource.hawtdispatch.internal.NioManager)>(v);
goto label;
label:
v = new org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy;
v = v;
specialinvoke v.<org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy: void <init>(org.fusesource.hawtdispatch.internal.NioManager)>(v);
label:
v.<org.fusesource.hawtdispatch.internal.NioManager: org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy selectStrategy> = v;
v = new java.util.concurrent.atomic.AtomicInteger;
specialinvoke v.<java.util.concurrent.atomic.AtomicInteger: void <init>()>();
v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger wakeupCounter> = v;
v = new java.util.concurrent.atomic.AtomicInteger;
specialinvoke v.<java.util.concurrent.atomic.AtomicInteger: void <init>()>();
v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger registeredKeys> = v;
v.<org.fusesource.hawtdispatch.internal.NioManager: boolean TRACE> = 0;
v = new java.util.LinkedList;
specialinvoke v.<java.util.LinkedList: void <init>()>();
v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.LinkedList traces> = v;
v = staticinvoke <java.nio.channels.Selector: java.nio.channels.Selector open()>();
v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector> = v;
return;
}
public boolean wakeupIfSelecting()
{
java.util.concurrent.atomic.AtomicInteger v;
java.nio.channels.Selector v;
int v, v;
org.fusesource.hawtdispatch.internal.NioManager v;
boolean v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger wakeupCounter>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int getAndIncrement()>();
v = v.<org.fusesource.hawtdispatch.internal.NioManager: int selectCounter>;
if v != v goto label;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: boolean selecting>;
if v == 0 goto label;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
virtualinvoke v.<java.nio.channels.Selector: java.nio.channels.Selector wakeup()>();
return 1;
label:
return 0;
}
public int select(long) throws java.io.IOException
{
java.lang.Throwable v;
java.nio.channels.CancelledKeyException v;
java.nio.channels.Selector v, v;
org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy v;
long v;
org.fusesource.hawtdispatch.internal.NioManager v;
byte v;
java.util.concurrent.atomic.AtomicInteger v, v, v;
int v, v, v, v, v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v := @parameter: long;
label:
v = v cmp 0L;
if v != 0 goto label;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
virtualinvoke v.<java.nio.channels.Selector: int selectNow()>();
goto label;
label:
v.<org.fusesource.hawtdispatch.internal.NioManager: boolean selecting> = 1;
label:
v = v.<org.fusesource.hawtdispatch.internal.NioManager: int selectCounter>;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger wakeupCounter>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
if v != v goto label;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy selectStrategy>;
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioManager$SelectStrategy: int select(long)>(v);
goto label;
label:
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
virtualinvoke v.<java.nio.channels.Selector: int selectNow()>();
label:
v.<org.fusesource.hawtdispatch.internal.NioManager: boolean selecting> = 0;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger wakeupCounter>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
v.<org.fusesource.hawtdispatch.internal.NioManager: int selectCounter> = v;
goto label;
label:
v := @caughtexception;
v.<org.fusesource.hawtdispatch.internal.NioManager: boolean selecting> = 0;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger wakeupCounter>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
v.<org.fusesource.hawtdispatch.internal.NioManager: int selectCounter> = v;
throw v;
label:
v := @caughtexception;
label:
v = specialinvoke v.<org.fusesource.hawtdispatch.internal.NioManager: int processSelected()>();
return v;
catch java.lang.Throwable from label to label with label;
catch java.nio.channels.CancelledKeyException from label to label with label;
}
private int processSelected()
{
java.nio.channels.CancelledKeyException v;
java.lang.Object[] v;
java.nio.channels.Selector v, v, v, v;
java.lang.Integer v;
org.fusesource.hawtdispatch.internal.NioManager v;
java.util.ArrayList v;
int v, v, v, v, v, v;
boolean v, v, v;
java.util.Iterator v;
java.util.Set v, v, v, v;
java.lang.Object v, v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.Selector: java.util.Set keys()>();
v = interfaceinvoke v.<java.util.Set: boolean isEmpty()>();
if v == 0 goto label;
return 0;
label:
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.Selector: java.util.Set selectedKeys()>();
v = interfaceinvoke v.<java.util.Set: int size()>();
if v == 0 goto label;
v = newarray (java.lang.Object)[1];
v = staticinvoke <java.lang.Integer: java.lang.Integer valueOf(int)>(v);
v[0] = v;
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioManager: void trace(java.lang.String,java.lang.Object[])>("selected: %d", v);
v = new java.util.ArrayList;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.Selector: java.util.Set selectedKeys()>();
specialinvoke v.<java.util.ArrayList: void <init>(java.util.Collection)>(v);
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.Selector: java.util.Set selectedKeys()>();
interfaceinvoke v.<java.util.Set: void clear()>();
v = virtualinvoke v.<java.util.ArrayList: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = virtualinvoke v.<java.nio.channels.SelectionKey: boolean isValid()>();
if v == 0 goto label;
label:
v = virtualinvoke v.<java.nio.channels.SelectionKey: int interestOps()>();
v = virtualinvoke v.<java.nio.channels.SelectionKey: int readyOps()>();
v = (int) -1;
v = v ^ v;
v = v & v;
virtualinvoke v.<java.nio.channels.SelectionKey: java.nio.channels.SelectionKey interestOps(int)>(v);
v = virtualinvoke v.<java.nio.channels.SelectionKey: java.lang.Object attachment()>();
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioAttachment: void selected(java.nio.channels.SelectionKey)>(v);
label:
goto label;
label:
v := @caughtexception;
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioManager: void cancel(java.nio.channels.SelectionKey)>(v);
goto label;
label:
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioManager: void cancel(java.nio.channels.SelectionKey)>(v);
goto label;
label:
return v;
catch java.nio.channels.CancelledKeyException from label to label with label;
}
public void shutdown() throws java.io.IOException
{
java.util.Iterator v;
java.nio.channels.Selector v, v;
java.util.Set v;
org.fusesource.hawtdispatch.internal.NioManager v;
java.lang.Object v, v;
boolean v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.Selector: java.util.Set keys()>();
v = interfaceinvoke v.<java.util.Set: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = virtualinvoke v.<java.nio.channels.SelectionKey: java.lang.Object attachment()>();
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioDispatchSource: void cancel()>();
goto label;
label:
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
virtualinvoke v.<java.nio.channels.Selector: void close()>();
return;
}
protected transient void trace(java.lang.String, java.lang.Object[])
{
java.lang.Object[] v;
java.lang.String v;
org.fusesource.hawtdispatch.internal.NioManager v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v := @parameter: java.lang.String;
v := @parameter: java.lang.Object[];
return;
}
public org.fusesource.hawtdispatch.internal.NioAttachment register(java.nio.channels.SelectableChannel, int) throws java.nio.channels.ClosedChannelException
{
java.nio.channels.CancelledKeyException v;
org.fusesource.hawtdispatch.internal.NioAttachment v;
java.nio.channels.SelectionKey v;
java.nio.channels.Selector v, v;
org.fusesource.hawtdispatch.internal.NioManager v;
java.nio.channels.SelectableChannel v;
java.util.concurrent.atomic.AtomicInteger v;
int v, v, v;
java.lang.Object v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v := @parameter: java.nio.channels.SelectableChannel;
v := @parameter: int;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.SelectableChannel: java.nio.channels.SelectionKey keyFor(java.nio.channels.Selector)>(v);
if v != null goto label;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
v = virtualinvoke v.<java.nio.channels.SelectableChannel: java.nio.channels.SelectionKey register(java.nio.channels.Selector,int)>(v, v);
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger registeredKeys>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int incrementAndGet()>();
v = new org.fusesource.hawtdispatch.internal.NioAttachment;
specialinvoke v.<org.fusesource.hawtdispatch.internal.NioAttachment: void <init>(java.nio.channels.SelectionKey)>(v);
virtualinvoke v.<java.nio.channels.SelectionKey: java.lang.Object attach(java.lang.Object)>(v);
label:
v = virtualinvoke v.<java.nio.channels.SelectionKey: int interestOps()>();
v = v | v;
virtualinvoke v.<java.nio.channels.SelectionKey: java.nio.channels.SelectionKey interestOps(int)>(v);
v = virtualinvoke v.<java.nio.channels.SelectionKey: java.lang.Object attachment()>();
label:
return v;
label:
v := @caughtexception;
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioManager: void cancel(java.nio.channels.SelectionKey)>(v);
throw v;
catch java.nio.channels.CancelledKeyException from label to label with label;
}
public int getRegisteredKeyCount()
{
int v;
java.util.concurrent.atomic.AtomicInteger v;
org.fusesource.hawtdispatch.internal.NioManager v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger registeredKeys>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int get()>();
return v;
}
public void cancel(java.nio.channels.SelectionKey)
{
java.util.concurrent.atomic.AtomicInteger v;
java.nio.channels.SelectionKey v;
java.nio.channels.Selector v;
java.lang.Object v;
org.fusesource.hawtdispatch.internal.NioManager v;
java.lang.Exception v;
v := @this: org.fusesource.hawtdispatch.internal.NioManager;
v := @parameter: java.nio.channels.SelectionKey;
v = virtualinvoke v.<java.nio.channels.SelectionKey: java.lang.Object attachment()>();
if v == null goto label;
virtualinvoke v.<java.nio.channels.SelectionKey: java.lang.Object attach(java.lang.Object)>(null);
virtualinvoke v.<org.fusesource.hawtdispatch.internal.NioAttachment: void cancel()>();
virtualinvoke v.<java.nio.channels.SelectionKey: void cancel()>();
label:
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.nio.channels.Selector selector>;
virtualinvoke v.<java.nio.channels.Selector: int selectNow()>();
label:
goto label;
label:
v := @caughtexception;
label:
v = v.<org.fusesource.hawtdispatch.internal.NioManager: java.util.concurrent.atomic.AtomicInteger registeredKeys>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicInteger: int decrementAndGet()>();
label:
return;
catch java.lang.Exception from label to label with label;
}
}