home *** CD-ROM | disk | FTP | other *** search
- package java.lang;
-
- import java.util.HashSet;
- import java.util.Iterator;
-
- class Shutdown {
- private static final int RUNNING = 0;
- private static final int HOOKS = 1;
- private static final int FINALIZERS = 2;
- private static int state = 0;
- private static boolean runFinalizersOnExit = false;
- private static HashSet hooks = null;
- private static Object lock = new Lock((1)null);
- // $FF: synthetic field
- static Class class$java$lang$Shutdown;
-
- static void setRunFinalizersOnExit(boolean var0) {
- Object var1 = lock;
- synchronized(var1) {
- runFinalizersOnExit = var0;
- }
- }
-
- static void add(Thread var0) {
- Object var1 = lock;
- synchronized(var1) {
- if (state > 0) {
- throw new IllegalStateException("Shutdown in progress");
- } else if (var0.isAlive()) {
- throw new IllegalArgumentException("Hook already running");
- } else {
- if (hooks == null) {
- hooks = new HashSet(11);
- hooks.add(new WrappedHook(var0));
- Terminator.setup();
- } else {
- WrappedHook var2 = new WrappedHook(var0);
- if (hooks.contains(var2)) {
- throw new IllegalArgumentException("Hook previously registered");
- }
-
- hooks.add(var2);
- }
-
- }
- }
- }
-
- static boolean remove(Thread var0) {
- Object var1 = lock;
- synchronized(var1) {
- if (state > 0) {
- throw new IllegalStateException("Shutdown in progress");
- } else if (var0 == null) {
- throw new NullPointerException();
- } else if (hooks == null) {
- boolean var6 = false;
- return var6;
- } else {
- boolean var2 = hooks.remove(new WrappedHook(var0));
- if (var2 && hooks.isEmpty()) {
- hooks = null;
- Terminator.teardown();
- }
-
- return var2;
- }
- }
- }
-
- private static void runHooks() {
- if (hooks != null) {
- Iterator var0 = hooks.iterator();
-
- while(var0.hasNext()) {
- java.lang.Shutdown.WrappedHook.access$100((WrappedHook)var0.next()).start();
- }
-
- Iterator var1 = hooks.iterator();
-
- while(var1.hasNext()) {
- try {
- java.lang.Shutdown.WrappedHook.access$100((WrappedHook)var1.next()).join();
- } catch (InterruptedException var3) {
- }
- }
-
- }
- }
-
- static native void halt(int var0);
-
- private static native void runAllFinalizers();
-
- private static void sequence() {
- Object var0 = lock;
- synchronized(var0) {
- if (state != 1) {
- return;
- }
- }
-
- runHooks();
- Object var2 = lock;
- boolean var1;
- synchronized(var2) {
- state = 2;
- var1 = runFinalizersOnExit;
- }
-
- if (var1) {
- runAllFinalizers();
- }
-
- }
-
- static void exit(int var0) {
- boolean var1 = false;
- Object var2 = lock;
- synchronized(var2) {
- if (var0 != 0) {
- runFinalizersOnExit = false;
- }
-
- switch (state) {
- case 0:
- state = 1;
- case 1:
- default:
- break;
- case 2:
- if (var0 != 0) {
- halt(var0);
- } else {
- var1 = runFinalizersOnExit;
- }
- }
- }
-
- if (var1) {
- runAllFinalizers();
- halt(var0);
- }
-
- Class var3 = class$java$lang$Shutdown == null ? (class$java$lang$Shutdown = class$("java.lang.Shutdown")) : class$java$lang$Shutdown;
- synchronized(var3) {
- sequence();
- halt(var0);
- }
- }
-
- static void shutdown() {
- Object var0 = lock;
- synchronized(var0) {
- switch (state) {
- case 0:
- state = 1;
- case 1:
- case 2:
- }
- }
-
- Class var1 = class$java$lang$Shutdown == null ? (class$java$lang$Shutdown = class$("java.lang.Shutdown")) : class$java$lang$Shutdown;
- synchronized(var1) {
- sequence();
- }
- }
-
- // $FF: synthetic method
- static Class class$(String var0) {
- try {
- return Class.forName(var0);
- } catch (ClassNotFoundException var2) {
- throw new NoClassDefFoundError(((Throwable)var2).getMessage());
- }
- }
- }
-