home *** CD-ROM | disk | FTP | other *** search
/ S283 Planetary Science &n…he Search for Life DVD 2 / DVD-ROM.iso / install / jre1_3 / lib / rt.jar / java / lang / Shutdown.class (.txt) < prev    next >
Encoding:
Java Class File  |  1979-12-31  |  2.9 KB  |  178 lines

  1. package java.lang;
  2.  
  3. import java.util.HashSet;
  4. import java.util.Iterator;
  5.  
  6. class Shutdown {
  7.    private static final int RUNNING = 0;
  8.    private static final int HOOKS = 1;
  9.    private static final int FINALIZERS = 2;
  10.    private static int state = 0;
  11.    private static boolean runFinalizersOnExit = false;
  12.    private static HashSet hooks = null;
  13.    private static Object lock = new Lock((1)null);
  14.    // $FF: synthetic field
  15.    static Class class$java$lang$Shutdown;
  16.  
  17.    static void setRunFinalizersOnExit(boolean var0) {
  18.       Object var1 = lock;
  19.       synchronized(var1) {
  20.          runFinalizersOnExit = var0;
  21.       }
  22.    }
  23.  
  24.    static void add(Thread var0) {
  25.       Object var1 = lock;
  26.       synchronized(var1) {
  27.          if (state > 0) {
  28.             throw new IllegalStateException("Shutdown in progress");
  29.          } else if (var0.isAlive()) {
  30.             throw new IllegalArgumentException("Hook already running");
  31.          } else {
  32.             if (hooks == null) {
  33.                hooks = new HashSet(11);
  34.                hooks.add(new WrappedHook(var0));
  35.                Terminator.setup();
  36.             } else {
  37.                WrappedHook var2 = new WrappedHook(var0);
  38.                if (hooks.contains(var2)) {
  39.                   throw new IllegalArgumentException("Hook previously registered");
  40.                }
  41.  
  42.                hooks.add(var2);
  43.             }
  44.  
  45.          }
  46.       }
  47.    }
  48.  
  49.    static boolean remove(Thread var0) {
  50.       Object var1 = lock;
  51.       synchronized(var1) {
  52.          if (state > 0) {
  53.             throw new IllegalStateException("Shutdown in progress");
  54.          } else if (var0 == null) {
  55.             throw new NullPointerException();
  56.          } else if (hooks == null) {
  57.             boolean var6 = false;
  58.             return var6;
  59.          } else {
  60.             boolean var2 = hooks.remove(new WrappedHook(var0));
  61.             if (var2 && hooks.isEmpty()) {
  62.                hooks = null;
  63.                Terminator.teardown();
  64.             }
  65.  
  66.             return var2;
  67.          }
  68.       }
  69.    }
  70.  
  71.    private static void runHooks() {
  72.       if (hooks != null) {
  73.          Iterator var0 = hooks.iterator();
  74.  
  75.          while(var0.hasNext()) {
  76.             java.lang.Shutdown.WrappedHook.access$100((WrappedHook)var0.next()).start();
  77.          }
  78.  
  79.          Iterator var1 = hooks.iterator();
  80.  
  81.          while(var1.hasNext()) {
  82.             try {
  83.                java.lang.Shutdown.WrappedHook.access$100((WrappedHook)var1.next()).join();
  84.             } catch (InterruptedException var3) {
  85.             }
  86.          }
  87.  
  88.       }
  89.    }
  90.  
  91.    static native void halt(int var0);
  92.  
  93.    private static native void runAllFinalizers();
  94.  
  95.    private static void sequence() {
  96.       Object var0 = lock;
  97.       synchronized(var0) {
  98.          if (state != 1) {
  99.             return;
  100.          }
  101.       }
  102.  
  103.       runHooks();
  104.       Object var2 = lock;
  105.       boolean var1;
  106.       synchronized(var2) {
  107.          state = 2;
  108.          var1 = runFinalizersOnExit;
  109.       }
  110.  
  111.       if (var1) {
  112.          runAllFinalizers();
  113.       }
  114.  
  115.    }
  116.  
  117.    static void exit(int var0) {
  118.       boolean var1 = false;
  119.       Object var2 = lock;
  120.       synchronized(var2) {
  121.          if (var0 != 0) {
  122.             runFinalizersOnExit = false;
  123.          }
  124.  
  125.          switch (state) {
  126.             case 0:
  127.                state = 1;
  128.             case 1:
  129.             default:
  130.                break;
  131.             case 2:
  132.                if (var0 != 0) {
  133.                   halt(var0);
  134.                } else {
  135.                   var1 = runFinalizersOnExit;
  136.                }
  137.          }
  138.       }
  139.  
  140.       if (var1) {
  141.          runAllFinalizers();
  142.          halt(var0);
  143.       }
  144.  
  145.       Class var3 = class$java$lang$Shutdown == null ? (class$java$lang$Shutdown = class$("java.lang.Shutdown")) : class$java$lang$Shutdown;
  146.       synchronized(var3) {
  147.          sequence();
  148.          halt(var0);
  149.       }
  150.    }
  151.  
  152.    static void shutdown() {
  153.       Object var0 = lock;
  154.       synchronized(var0) {
  155.          switch (state) {
  156.             case 0:
  157.                state = 1;
  158.             case 1:
  159.             case 2:
  160.          }
  161.       }
  162.  
  163.       Class var1 = class$java$lang$Shutdown == null ? (class$java$lang$Shutdown = class$("java.lang.Shutdown")) : class$java$lang$Shutdown;
  164.       synchronized(var1) {
  165.          sequence();
  166.       }
  167.    }
  168.  
  169.    // $FF: synthetic method
  170.    static Class class$(String var0) {
  171.       try {
  172.          return Class.forName(var0);
  173.       } catch (ClassNotFoundException var2) {
  174.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  175.       }
  176.    }
  177. }
  178.