public class org.apache.activemq.broker.TransportStatusDetector extends java.lang.Object implements org.apache.activemq.Service, java.lang.Runnable
{
private static final org.slf4j.Logger LOG;
private org.apache.activemq.broker.TransportConnector connector;
private java.util.Set collectionCandidates;
private java.util.concurrent.atomic.AtomicBoolean started;
private java.lang.Thread runner;
private int sweepInterval;
void <init>(org.apache.activemq.broker.TransportConnector)
{
org.apache.activemq.broker.TransportConnector v;
java.util.concurrent.atomic.AtomicBoolean v;
java.util.concurrent.CopyOnWriteArraySet v;
org.apache.activemq.broker.TransportStatusDetector v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v := @parameter: org.apache.activemq.broker.TransportConnector;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.CopyOnWriteArraySet;
specialinvoke v.<java.util.concurrent.CopyOnWriteArraySet: void <init>()>();
v.<org.apache.activemq.broker.TransportStatusDetector: java.util.Set collectionCandidates> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>(boolean)>(0);
v.<org.apache.activemq.broker.TransportStatusDetector: java.util.concurrent.atomic.AtomicBoolean started> = v;
v.<org.apache.activemq.broker.TransportStatusDetector: int sweepInterval> = 5000;
v.<org.apache.activemq.broker.TransportStatusDetector: org.apache.activemq.broker.TransportConnector connector> = v;
return;
}
public int getSweepInterval()
{
int v;
org.apache.activemq.broker.TransportStatusDetector v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v = v.<org.apache.activemq.broker.TransportStatusDetector: int sweepInterval>;
return v;
}
public void setSweepInterval(int)
{
int v;
org.apache.activemq.broker.TransportStatusDetector v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v := @parameter: int;
v.<org.apache.activemq.broker.TransportStatusDetector: int sweepInterval> = v;
return;
}
protected void doCollection()
{
java.util.Iterator v;
java.util.Set v, v, v;
java.lang.Object v;
org.apache.activemq.broker.TransportStatusDetector v;
boolean v, v, v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.Set collectionCandidates>;
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.<org.apache.activemq.broker.TransportConnection: boolean isMarkedCandidate()>();
if v == 0 goto label;
v = virtualinvoke v.<org.apache.activemq.broker.TransportConnection: boolean isBlockedCandidate()>();
if v == 0 goto label;
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.Set collectionCandidates>;
interfaceinvoke v.<java.util.Set: boolean remove(java.lang.Object)>(v);
virtualinvoke v.<org.apache.activemq.broker.TransportStatusDetector: void doCollection(org.apache.activemq.broker.TransportConnection)>(v);
goto label;
label:
virtualinvoke v.<org.apache.activemq.broker.TransportConnection: void doMark()>();
goto label;
label:
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.Set collectionCandidates>;
interfaceinvoke v.<java.util.Set: boolean remove(java.lang.Object)>(v);
goto label;
label:
return;
}
protected void doSweep()
{
java.util.Iterator v;
java.util.Set v;
org.apache.activemq.broker.TransportConnector v;
java.lang.Object v;
org.apache.activemq.broker.TransportStatusDetector v;
boolean v, v;
java.util.concurrent.CopyOnWriteArrayList v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v = v.<org.apache.activemq.broker.TransportStatusDetector: org.apache.activemq.broker.TransportConnector connector>;
v = virtualinvoke v.<org.apache.activemq.broker.TransportConnector: java.util.concurrent.CopyOnWriteArrayList getConnections()>();
v = virtualinvoke v.<java.util.concurrent.CopyOnWriteArrayList: 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.<org.apache.activemq.broker.TransportConnection: boolean isMarkedCandidate()>();
if v == 0 goto label;
virtualinvoke v.<org.apache.activemq.broker.TransportConnection: void doMark()>();
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.Set collectionCandidates>;
interfaceinvoke v.<java.util.Set: boolean add(java.lang.Object)>(v);
goto label;
label:
return;
}
protected void doCollection(org.apache.activemq.broker.TransportConnection)
{
org.apache.activemq.broker.TransportConnection v;
org.slf4j.Logger v, v;
org.apache.activemq.broker.TransportStatusDetector v;
java.lang.Exception v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v := @parameter: org.apache.activemq.broker.TransportConnection;
v = <org.apache.activemq.broker.TransportStatusDetector: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void warn(java.lang.String,java.lang.Object)>("found a blocked client - stopping: {}", v);
label:
virtualinvoke v.<org.apache.activemq.broker.TransportConnection: void stop()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.activemq.broker.TransportStatusDetector: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Object,java.lang.Object)>("Error stopping {}", v, v);
label:
return;
catch java.lang.Exception from label to label with label;
}
public void run()
{
java.lang.Throwable v;
org.slf4j.Logger v;
int v;
java.util.concurrent.atomic.AtomicBoolean v;
org.apache.activemq.broker.TransportStatusDetector v;
boolean v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
label:
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.concurrent.atomic.AtomicBoolean started>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean get()>();
if v == 0 goto label;
label:
virtualinvoke v.<org.apache.activemq.broker.TransportStatusDetector: void doCollection()>();
virtualinvoke v.<org.apache.activemq.broker.TransportStatusDetector: void doSweep()>();
v = v.<org.apache.activemq.broker.TransportStatusDetector: int sweepInterval>;
staticinvoke <java.lang.Thread: void sleep(long)>(v);
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.activemq.broker.TransportStatusDetector: org.slf4j.Logger LOG>;
interfaceinvoke v.<org.slf4j.Logger: void error(java.lang.String,java.lang.Throwable)>("failed to complete a sweep for blocked clients", v);
goto label;
label:
return;
catch java.lang.Throwable from label to label with label;
}
public void start() throws java.lang.Exception
{
java.util.concurrent.atomic.AtomicBoolean v;
org.apache.activemq.broker.TransportConnector v;
java.lang.Thread v, v, v, v;
java.lang.String v;
org.apache.activemq.broker.TransportStatusDetector v;
boolean v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.concurrent.atomic.AtomicBoolean started>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean compareAndSet(boolean,boolean)>(0, 1);
if v == 0 goto label;
v = new java.lang.Thread;
v = v.<org.apache.activemq.broker.TransportStatusDetector: org.apache.activemq.broker.TransportConnector connector>;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (org.apache.activemq.broker.TransportConnector)>(v) <java.lang.invoke.StringConcatFactory: java.lang.invoke.CallSite makeConcatWithConstants(java.lang.invoke.MethodHandles$Lookup,java.lang.String,java.lang.invoke.MethodType,java.lang.String,java.lang.Object[])>("ActiveMQ Transport Status Monitor: \u0001");
specialinvoke v.<java.lang.Thread: void <init>(java.lang.Runnable,java.lang.String)>(v, v);
v.<org.apache.activemq.broker.TransportStatusDetector: java.lang.Thread runner> = v;
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.lang.Thread runner>;
virtualinvoke v.<java.lang.Thread: void setDaemon(boolean)>(1);
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.lang.Thread runner>;
virtualinvoke v.<java.lang.Thread: void setPriority(int)>(9);
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.lang.Thread runner>;
virtualinvoke v.<java.lang.Thread: void start()>();
label:
return;
}
public void stop() throws java.lang.Exception
{
java.lang.Thread v, v;
int v;
java.util.concurrent.atomic.AtomicBoolean v;
long v;
org.apache.activemq.broker.TransportStatusDetector v;
v := @this: org.apache.activemq.broker.TransportStatusDetector;
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.util.concurrent.atomic.AtomicBoolean started>;
virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void set(boolean)>(0);
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.lang.Thread runner>;
if v == null goto label;
v = v.<org.apache.activemq.broker.TransportStatusDetector: java.lang.Thread runner>;
v = virtualinvoke v.<org.apache.activemq.broker.TransportStatusDetector: int getSweepInterval()>();
v = v * 5L;
virtualinvoke v.<java.lang.Thread: void join(long)>(v);
label:
return;
}
static void <clinit>()
{
org.slf4j.Logger v;
v = staticinvoke <org.slf4j.LoggerFactory: org.slf4j.Logger getLogger(java.lang.Class)>(class "Lorg/apache/activemq/broker/TransportStatusDetector;");
<org.apache.activemq.broker.TransportStatusDetector: org.slf4j.Logger LOG> = v;
return;
}
}