public class org.apache.dubbo.config.DubboShutdownHook extends java.lang.Thread
{
private static final org.apache.dubbo.common.logger.Logger logger;
private static final org.apache.dubbo.config.DubboShutdownHook DUBBO_SHUTDOWN_HOOK;
private final org.apache.dubbo.common.lang.ShutdownHookCallbacks callbacks;
private final java.util.concurrent.atomic.AtomicBoolean registered;
private static final java.util.concurrent.atomic.AtomicBoolean destroyed;
private final org.apache.dubbo.event.EventDispatcher eventDispatcher;
private void <init>(java.lang.String)
{
org.apache.dubbo.config.DubboShutdownHook v;
java.util.concurrent.atomic.AtomicBoolean v;
org.apache.dubbo.common.lang.ShutdownHookCallbacks v;
java.lang.String v;
org.apache.dubbo.event.EventDispatcher v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v := @parameter: java.lang.String;
specialinvoke v.<java.lang.Thread: void <init>(java.lang.String)>(v);
v = <org.apache.dubbo.common.lang.ShutdownHookCallbacks: org.apache.dubbo.common.lang.ShutdownHookCallbacks INSTANCE>;
v.<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.lang.ShutdownHookCallbacks callbacks> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>(boolean)>(0);
v.<org.apache.dubbo.config.DubboShutdownHook: java.util.concurrent.atomic.AtomicBoolean registered> = v;
v = staticinvoke <org.apache.dubbo.event.EventDispatcher: org.apache.dubbo.event.EventDispatcher getDefaultExtension()>();
v.<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.event.EventDispatcher eventDispatcher> = v;
return;
}
public static org.apache.dubbo.config.DubboShutdownHook getDubboShutdownHook()
{
org.apache.dubbo.config.DubboShutdownHook v;
v = <org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.config.DubboShutdownHook DUBBO_SHUTDOWN_HOOK>;
return v;
}
public void run()
{
org.apache.dubbo.config.DubboShutdownHook v;
org.apache.dubbo.common.logger.Logger v, v;
boolean v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = <org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.logger.Logger logger>;
v = interfaceinvoke v.<org.apache.dubbo.common.logger.Logger: boolean isInfoEnabled()>();
if v == 0 goto label;
v = <org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.logger.Logger logger>;
interfaceinvoke v.<org.apache.dubbo.common.logger.Logger: void info(java.lang.String)>("Run shutdown hook now.");
label:
specialinvoke v.<org.apache.dubbo.config.DubboShutdownHook: void callback()>();
virtualinvoke v.<org.apache.dubbo.config.DubboShutdownHook: void doDestroy()>();
return;
}
void clear()
{
org.apache.dubbo.config.DubboShutdownHook v;
org.apache.dubbo.common.lang.ShutdownHookCallbacks v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = v.<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.lang.ShutdownHookCallbacks callbacks>;
virtualinvoke v.<org.apache.dubbo.common.lang.ShutdownHookCallbacks: void clear()>();
return;
}
private void callback()
{
org.apache.dubbo.config.DubboShutdownHook v;
org.apache.dubbo.common.lang.ShutdownHookCallbacks v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = v.<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.lang.ShutdownHookCallbacks callbacks>;
virtualinvoke v.<org.apache.dubbo.common.lang.ShutdownHookCallbacks: void callback()>();
return;
}
public void register()
{
org.apache.dubbo.config.DubboShutdownHook v, v;
org.apache.dubbo.config.event.DubboShutdownHookRegisteredEvent v;
java.lang.Runtime v;
java.util.concurrent.atomic.AtomicBoolean v;
boolean v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = v.<org.apache.dubbo.config.DubboShutdownHook: java.util.concurrent.atomic.AtomicBoolean registered>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean compareAndSet(boolean,boolean)>(0, 1);
if v == 0 goto label;
v = staticinvoke <org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.config.DubboShutdownHook getDubboShutdownHook()>();
v = staticinvoke <java.lang.Runtime: java.lang.Runtime getRuntime()>();
virtualinvoke v.<java.lang.Runtime: void addShutdownHook(java.lang.Thread)>(v);
v = new org.apache.dubbo.config.event.DubboShutdownHookRegisteredEvent;
specialinvoke v.<org.apache.dubbo.config.event.DubboShutdownHookRegisteredEvent: void <init>(org.apache.dubbo.config.DubboShutdownHook)>(v);
specialinvoke v.<org.apache.dubbo.config.DubboShutdownHook: void dispatch(org.apache.dubbo.event.Event)>(v);
label:
return;
}
public void unregister()
{
org.apache.dubbo.config.DubboShutdownHook v, v;
org.apache.dubbo.config.event.DubboShutdownHookUnregisteredEvent v;
java.lang.Runtime v;
java.util.concurrent.atomic.AtomicBoolean v;
boolean v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = v.<org.apache.dubbo.config.DubboShutdownHook: java.util.concurrent.atomic.AtomicBoolean registered>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean compareAndSet(boolean,boolean)>(1, 0);
if v == 0 goto label;
v = staticinvoke <org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.config.DubboShutdownHook getDubboShutdownHook()>();
v = staticinvoke <java.lang.Runtime: java.lang.Runtime getRuntime()>();
virtualinvoke v.<java.lang.Runtime: boolean removeShutdownHook(java.lang.Thread)>(v);
v = new org.apache.dubbo.config.event.DubboShutdownHookUnregisteredEvent;
specialinvoke v.<org.apache.dubbo.config.event.DubboShutdownHookUnregisteredEvent: void <init>(org.apache.dubbo.config.DubboShutdownHook)>(v);
specialinvoke v.<org.apache.dubbo.config.DubboShutdownHook: void dispatch(org.apache.dubbo.event.Event)>(v);
label:
return;
}
public void doDestroy()
{
org.apache.dubbo.config.DubboShutdownHook v;
org.apache.dubbo.config.event.DubboServiceDestroyedEvent v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = new org.apache.dubbo.config.event.DubboServiceDestroyedEvent;
specialinvoke v.<org.apache.dubbo.config.event.DubboServiceDestroyedEvent: void <init>(java.lang.Object)>(v);
specialinvoke v.<org.apache.dubbo.config.DubboShutdownHook: void dispatch(org.apache.dubbo.event.Event)>(v);
return;
}
private void dispatch(org.apache.dubbo.event.Event)
{
org.apache.dubbo.config.DubboShutdownHook v;
org.apache.dubbo.event.EventDispatcher v;
org.apache.dubbo.event.Event v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v := @parameter: org.apache.dubbo.event.Event;
v = v.<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.event.EventDispatcher eventDispatcher>;
interfaceinvoke v.<org.apache.dubbo.event.EventDispatcher: void dispatch(org.apache.dubbo.event.Event)>(v);
return;
}
public boolean getRegistered()
{
org.apache.dubbo.config.DubboShutdownHook v;
java.util.concurrent.atomic.AtomicBoolean v;
boolean v;
v := @this: org.apache.dubbo.config.DubboShutdownHook;
v = v.<org.apache.dubbo.config.DubboShutdownHook: java.util.concurrent.atomic.AtomicBoolean registered>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean get()>();
return v;
}
public static void destroyAll()
{
java.util.concurrent.atomic.AtomicBoolean v;
boolean v;
v = <org.apache.dubbo.config.DubboShutdownHook: java.util.concurrent.atomic.AtomicBoolean destroyed>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicBoolean: boolean compareAndSet(boolean,boolean)>(0, 1);
if v == 0 goto label;
staticinvoke <org.apache.dubbo.registry.support.AbstractRegistryFactory: void destroyAll()>();
staticinvoke <org.apache.dubbo.config.DubboShutdownHook: void destroyProtocols()>();
label:
return;
}
public static void destroyProtocols()
{
java.lang.Throwable v;
org.apache.dubbo.common.extension.ExtensionLoader v;
java.util.Iterator v;
org.apache.dubbo.common.logger.Logger v;
java.util.Set v;
java.lang.Object v, v;
java.lang.String v;
boolean v;
v = staticinvoke <org.apache.dubbo.common.extension.ExtensionLoader: org.apache.dubbo.common.extension.ExtensionLoader getExtensionLoader(java.lang.Class)>(class "Lorg/apache/dubbo/rpc/Protocol;");
v = virtualinvoke v.<org.apache.dubbo.common.extension.ExtensionLoader: java.util.Set getLoadedExtensions()>();
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()>();
label:
v = virtualinvoke v.<org.apache.dubbo.common.extension.ExtensionLoader: java.lang.Object getLoadedExtension(java.lang.String)>(v);
if v == null goto label;
interfaceinvoke v.<org.apache.dubbo.rpc.Protocol: void destroy()>();
label:
goto label;
label:
v := @caughtexception;
v = <org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.logger.Logger logger>;
v = virtualinvoke v.<java.lang.Throwable: java.lang.String getMessage()>();
interfaceinvoke v.<org.apache.dubbo.common.logger.Logger: void warn(java.lang.String,java.lang.Throwable)>(v, v);
goto label;
label:
return;
catch java.lang.Throwable from label to label with label;
}
static void <clinit>()
{
org.apache.dubbo.config.DubboShutdownHook v;
java.util.concurrent.atomic.AtomicBoolean v;
org.apache.dubbo.common.logger.Logger v;
v = staticinvoke <org.apache.dubbo.common.logger.LoggerFactory: org.apache.dubbo.common.logger.Logger getLogger(java.lang.Class)>(class "Lorg/apache/dubbo/config/DubboShutdownHook;");
<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.common.logger.Logger logger> = v;
v = new org.apache.dubbo.config.DubboShutdownHook;
specialinvoke v.<org.apache.dubbo.config.DubboShutdownHook: void <init>(java.lang.String)>("DubboShutdownHook");
<org.apache.dubbo.config.DubboShutdownHook: org.apache.dubbo.config.DubboShutdownHook DUBBO_SHUTDOWN_HOOK> = v;
v = new java.util.concurrent.atomic.AtomicBoolean;
specialinvoke v.<java.util.concurrent.atomic.AtomicBoolean: void <init>(boolean)>(0);
<org.apache.dubbo.config.DubboShutdownHook: java.util.concurrent.atomic.AtomicBoolean destroyed> = v;
return;
}
}