public final class io.netty.util.ThreadDeathWatcher extends java.lang.Object
{
private static final io.netty.util.internal.logging.InternalLogger logger;
static final java.util.concurrent.ThreadFactory threadFactory;
private static final java.util.Queue pendingEntries;
private static final io.netty.util.ThreadDeathWatcher$Watcher watcher;
private static final java.util.concurrent.atomic.AtomicBoolean started;
private static volatile java.lang.Thread watcherThread;
public static void watch(java.lang.Thread, java.lang.Runnable)
{
java.lang.Thread v;
java.lang.IllegalArgumentException v;
java.lang.Runnable v;
boolean v;
v := @parameter: java.lang.Thread;
v := @parameter: java.lang.Runnable;
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "thread");
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "task");
v = virtualinvoke v.<java.lang.Thread: boolean isAlive()>();
if v != 0 goto label;
v = new java.lang.IllegalArgumentException;
specialinvoke v.<java.lang.IllegalArgumentException: void <init>(java.lang.String)>("thread must be alive.");
throw v;
label:
staticinvoke <io.netty.util.ThreadDeathWatcher: void schedule(java.lang.Thread,java.lang.Runnable,boolean)>(v, v, 1);
return;
}
public static void unwatch(java.lang.Thread, java.lang.Runnable)
{
java.lang.Thread v;
java.lang.Object v, v;
java.lang.Runnable v;
v := @parameter: java.lang.Thread;
v := @parameter: java.lang.Runnable;
v = staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "thread");
v = staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "task");
staticinvoke <io.netty.util.ThreadDeathWatcher: void schedule(java.lang.Thread,java.lang.Runnable,boolean)>(v, v, 0);
return;
}
private static void schedule(java.lang.Thread, java.lang.Runnable, boolean)
{
java.util.concurrent.atomic.AtomicBoolean v;
io.netty.util.ThreadDeathWatcher$1 v;
java.lang.Runnable v;
java.lang.Thread v, v;
io.netty.util.ThreadDeathWatcher$Watcher v;
java.util.Queue v;
java.util.concurrent.ThreadFactory v;
boolean v, v;
io.netty.util.ThreadDeathWatcher$Entry v;
v := @parameter: java.lang.Thread;
v := @parameter: java.lang.Runnable;
v := @parameter: boolean;
v = <io.netty.util.ThreadDeathWatcher: java.util.Queue pendingEntries>;
v = new io.netty.util.ThreadDeathWatcher$Entry;
specialinvoke v.<io.netty.util.ThreadDeathWatcher$Entry: void <init>(java.lang.Thread,java.lang.Runnable,boolean)>(v, v, v);
interfaceinvoke v.<java.util.Queue: boolean add(java.lang.Object)>(v);
v = <io.netty.util.ThreadDeathWatcher: 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 = <io.netty.util.ThreadDeathWatcher: java.util.concurrent.ThreadFactory threadFactory>;
v = <io.netty.util.ThreadDeathWatcher: io.netty.util.ThreadDeathWatcher$Watcher watcher>;
v = interfaceinvoke v.<java.util.concurrent.ThreadFactory: java.lang.Thread newThread(java.lang.Runnable)>(v);
v = new io.netty.util.ThreadDeathWatcher$1;
specialinvoke v.<io.netty.util.ThreadDeathWatcher$1: void <init>(java.lang.Thread)>(v);
staticinvoke <java.security.AccessController: java.lang.Object doPrivileged(java.security.PrivilegedAction)>(v);
virtualinvoke v.<java.lang.Thread: void start()>();
<io.netty.util.ThreadDeathWatcher: java.lang.Thread watcherThread> = v;
label:
return;
}
public static boolean awaitInactivity(long, java.util.concurrent.TimeUnit) throws java.lang.InterruptedException
{
java.util.concurrent.TimeUnit v;
java.lang.Thread v;
long v, v;
boolean v, v;
v := @parameter: long;
v := @parameter: java.util.concurrent.TimeUnit;
staticinvoke <io.netty.util.internal.ObjectUtil: java.lang.Object checkNotNull(java.lang.Object,java.lang.String)>(v, "unit");
v = <io.netty.util.ThreadDeathWatcher: java.lang.Thread watcherThread>;
if v == null goto label;
v = virtualinvoke v.<java.util.concurrent.TimeUnit: long toMillis(long)>(v);
virtualinvoke v.<java.lang.Thread: void join(long)>(v);
v = virtualinvoke v.<java.lang.Thread: boolean isAlive()>();
if v != 0 goto label;
v = 1;
goto label;
label:
v = 0;
label:
return v;
label:
return 1;
}
private void <init>()
{
io.netty.util.ThreadDeathWatcher v;
v := @this: io.netty.util.ThreadDeathWatcher;
specialinvoke v.<java.lang.Object: void <init>()>();
return;
}
static void <clinit>()
{
io.netty.util.concurrent.DefaultThreadFactory v;
java.util.concurrent.atomic.AtomicBoolean v;
io.netty.util.internal.logging.InternalLogger v;
io.netty.util.ThreadDeathWatcher$Watcher v;
java.lang.String v, v;
boolean v;
java.util.concurrent.ConcurrentLinkedQueue v;
v = staticinvoke <io.netty.util.internal.logging.InternalLoggerFactory: io.netty.util.internal.logging.InternalLogger getInstance(java.lang.Class)>(class "Lio/netty/util/ThreadDeathWatcher;");
<io.netty.util.ThreadDeathWatcher: io.netty.util.internal.logging.InternalLogger logger> = v;
v = new java.util.concurrent.ConcurrentLinkedQueue;
specialinvoke v.<java.util.concurrent.ConcurrentLinkedQueue: void <init>()>();
<io.netty.util.ThreadDeathWatcher: java.util.Queue pendingEntries> = v;
v = new io.netty.util.ThreadDeathWatcher$Watcher;
specialinvoke v.<io.netty.util.ThreadDeathWatcher$Watcher: void <init>()>();
<io.netty.util.ThreadDeathWatcher: io.netty.util.ThreadDeathWatcher$Watcher watcher> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>()>();
<io.netty.util.ThreadDeathWatcher: java.util.concurrent.atomic.AtomicBoolean started> = v;
v = "threadDeathWatcher";
v = staticinvoke <io.netty.util.internal.SystemPropertyUtil: java.lang.String get(java.lang.String)>("io.netty.serviceThreadPrefix");
v = staticinvoke <io.netty.util.internal.StringUtil: boolean isNullOrEmpty(java.lang.String)>(v);
if v != 0 goto label;
v = dynamicinvoke "makeConcatWithConstants" <java.lang.String (java.lang.String,java.lang.String)>(v, "threadDeathWatcher") <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[])>("\u0001\u0001");
label:
v = new io.netty.util.concurrent.DefaultThreadFactory;
specialinvoke v.<io.netty.util.concurrent.DefaultThreadFactory: void <init>(java.lang.String,boolean,int,java.lang.ThreadGroup)>(v, 1, 1, null);
<io.netty.util.ThreadDeathWatcher: java.util.concurrent.ThreadFactory threadFactory> = v;
return;
}
}