home *** CD-ROM | disk | FTP | other *** search
- package java.lang;
-
- import java.util.ArrayList;
-
- 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 ArrayList<Runnable> hooks = new ArrayList();
- private static Object lock = new Lock((1)null);
- private static Object haltLock = new Lock((1)null);
-
- static void setRunFinalizersOnExit(boolean var0) {
- synchronized(lock) {
- runFinalizersOnExit = var0;
- }
- }
-
- static void add(Runnable var0) {
- synchronized(lock) {
- if (state > 0) {
- throw new IllegalStateException("Shutdown in progress");
- } else {
- hooks.add(var0);
- }
- }
- }
-
- static boolean remove(Runnable var0) {
- synchronized(lock) {
- if (state > 0) {
- throw new IllegalStateException("Shutdown in progress");
- } else if (var0 == null) {
- throw new NullPointerException();
- } else {
- return hooks == null ? false : hooks.remove(var0);
- }
- }
- }
-
- private static void runHooks() {
- for(Runnable var1 : hooks) {
- try {
- var1.run();
- } catch (Throwable var4) {
- if (var4 instanceof ThreadDeath) {
- ThreadDeath var3 = (ThreadDeath)var4;
- throw var3;
- }
- }
- }
-
- }
-
- static void halt(int var0) {
- synchronized(haltLock) {
- halt0(var0);
- }
- }
-
- static native void halt0(int var0);
-
- private static native void runAllFinalizers();
-
- private static void sequence() {
- synchronized(lock) {
- if (state != 1) {
- return;
- }
- }
-
- runHooks();
- boolean var0;
- synchronized(lock) {
- state = 2;
- var0 = runFinalizersOnExit;
- }
-
- if (var0) {
- runAllFinalizers();
- }
-
- }
-
- static void exit(int var0) {
- boolean var1 = false;
- synchronized(lock) {
- 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);
- }
-
- synchronized(Shutdown.class) {
- sequence();
- halt(var0);
- }
- }
-
- static void shutdown() {
- synchronized(lock) {
- switch (state) {
- case 0:
- state = 1;
- case 1:
- case 2:
- }
- }
-
- synchronized(Shutdown.class) {
- sequence();
- }
- }
- }
-