class org.h2.engine.OnExitDatabaseCloser extends java.lang.Thread
  minor version: 0
  major version: 59
  flags: flags: (0x0020) ACC_SUPER
  this_class: org.h2.engine.OnExitDatabaseCloser
  super_class: java.lang.Thread
{
  private static final java.util.WeakHashMap<org.h2.engine.Database, java.lang.Void> DATABASES;
    descriptor: Ljava/util/WeakHashMap;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
    Signature: Ljava/util/WeakHashMap<Lorg/h2/engine/Database;Ljava/lang/Void;>;

  private static final java.lang.Thread INSTANCE;
    descriptor: Ljava/lang/Thread;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static boolean registered;
    descriptor: Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static boolean terminated;
    descriptor: Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 17
            new java.util.WeakHashMap
            dup
            invokespecial java.util.WeakHashMap.<init>:()V
            putstatic org.h2.engine.OnExitDatabaseCloser.DATABASES:Ljava/util/WeakHashMap;
         1: .line 19
            new org.h2.engine.OnExitDatabaseCloser
            dup
            invokespecial org.h2.engine.OnExitDatabaseCloser.<init>:()V
            putstatic org.h2.engine.OnExitDatabaseCloser.INSTANCE:Ljava/lang/Thread;
         2: .line 23
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static synchronized void register(org.h2.engine.Database);
    descriptor: (Lorg/h2/engine/Database;)V
    flags: (0x0028) ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=1, args_size=1
        start local 0 // org.h2.engine.Database db
         0: .line 31
            getstatic org.h2.engine.OnExitDatabaseCloser.terminated:Z
            ifeq 2
         1: .line 33
            return
         2: .line 35
      StackMap locals:
      StackMap stack:
            getstatic org.h2.engine.OnExitDatabaseCloser.DATABASES:Ljava/util/WeakHashMap;
            aload 0 /* db */
            aconst_null
            invokevirtual java.util.WeakHashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 36
            getstatic org.h2.engine.OnExitDatabaseCloser.registered:Z
            ifne 9
         4: .line 39
            iconst_1
            putstatic org.h2.engine.OnExitDatabaseCloser.registered:Z
         5: .line 41
            invokestatic java.lang.Runtime.getRuntime:()Ljava/lang/Runtime;
            getstatic org.h2.engine.OnExitDatabaseCloser.INSTANCE:Ljava/lang/Thread;
            invokevirtual java.lang.Runtime.addShutdownHook:(Ljava/lang/Thread;)V
         6: .line 42
            goto 9
      StackMap locals:
      StackMap stack: java.lang.IllegalStateException
         7: pop
            goto 9
         8: .line 46
      StackMap locals:
      StackMap stack: java.lang.SecurityException
            pop
         9: .line 52
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.h2.engine.Database db
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0    db  Lorg/h2/engine/Database;
      Exception table:
        from    to  target  type
           5     6       7  Class java.lang.IllegalStateException
           5     6       8  Class java.lang.SecurityException
    MethodParameters:
      Name  Flags
      db    

  static synchronized void unregister(org.h2.engine.Database);
    descriptor: (Lorg/h2/engine/Database;)V
    flags: (0x0028) ACC_STATIC, ACC_SYNCHRONIZED
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.h2.engine.Database db
         0: .line 60
            getstatic org.h2.engine.OnExitDatabaseCloser.terminated:Z
            ifeq 2
         1: .line 63
            return
         2: .line 65
      StackMap locals:
      StackMap stack:
            getstatic org.h2.engine.OnExitDatabaseCloser.DATABASES:Ljava/util/WeakHashMap;
            aload 0 /* db */
            invokevirtual java.util.WeakHashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 66
            getstatic org.h2.engine.OnExitDatabaseCloser.DATABASES:Ljava/util/WeakHashMap;
            invokevirtual java.util.WeakHashMap.isEmpty:()Z
            ifeq 9
            getstatic org.h2.engine.OnExitDatabaseCloser.registered:Z
            ifeq 9
         4: .line 68
            invokestatic java.lang.Runtime.getRuntime:()Ljava/lang/Runtime;
            getstatic org.h2.engine.OnExitDatabaseCloser.INSTANCE:Ljava/lang/Thread;
            invokevirtual java.lang.Runtime.removeShutdownHook:(Ljava/lang/Thread;)Z
            pop
         5: .line 69
            goto 8
      StackMap locals:
      StackMap stack: java.lang.IllegalStateException
         6: pop
            goto 8
         7: .line 71
      StackMap locals:
      StackMap stack: java.lang.SecurityException
            pop
         8: .line 74
      StackMap locals:
      StackMap stack:
            iconst_0
            putstatic org.h2.engine.OnExitDatabaseCloser.registered:Z
         9: .line 76
      StackMap locals:
      StackMap stack:
            return
        end local 0 // org.h2.engine.Database db
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0   10     0    db  Lorg/h2/engine/Database;
      Exception table:
        from    to  target  type
           4     5       6  Class java.lang.IllegalStateException
           4     5       7  Class java.lang.SecurityException
    MethodParameters:
      Name  Flags
      db    

  private static void onShutdown();
    descriptor: ()V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=0
         0: .line 79
            ldc Lorg/h2/engine/OnExitDatabaseCloser;
            dup
            astore 0
            monitorenter
         1: .line 80
            iconst_1
            putstatic org.h2.engine.OnExitDatabaseCloser.terminated:Z
         2: .line 79
            aload 0
            monitorexit
         3: goto 6
      StackMap locals: java.lang.Class
      StackMap stack: java.lang.Throwable
         4: aload 0
            monitorexit
         5: athrow
         6: .line 82
      StackMap locals:
      StackMap stack:
            aconst_null
            astore 0 /* root */
        start local 0 // java.lang.RuntimeException root
         7: .line 83
            getstatic org.h2.engine.OnExitDatabaseCloser.DATABASES:Ljava/util/WeakHashMap;
            invokevirtual java.util.WeakHashMap.keySet:()Ljava/util/Set;
            invokeinterface java.util.Set.iterator:()Ljava/util/Iterator;
            astore 2
            goto 20
      StackMap locals: java.lang.RuntimeException top java.util.Iterator
      StackMap stack:
         8: aload 2
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast org.h2.engine.Database
            astore 1 /* database */
        start local 1 // org.h2.engine.Database database
         9: .line 85
            aload 1 /* database */
            iconst_1
            invokevirtual org.h2.engine.Database.close:(Z)V
        10: .line 86
            goto 20
      StackMap locals: java.lang.RuntimeException org.h2.engine.Database java.util.Iterator
      StackMap stack: java.lang.RuntimeException
        11: astore 3 /* e */
        start local 3 // java.lang.RuntimeException e
        12: .line 91
            aload 1 /* database */
            iconst_2
            invokevirtual org.h2.engine.Database.getTrace:(I)Lorg/h2/message/Trace;
            aload 3 /* e */
            ldc "could not close the database"
            invokevirtual org.h2.message.Trace.error:(Ljava/lang/Throwable;Ljava/lang/String;)V
        13: .line 94
            goto 20
      StackMap locals: java.lang.RuntimeException org.h2.engine.Database java.util.Iterator java.lang.RuntimeException
      StackMap stack: java.lang.Throwable
        14: astore 4 /* e2 */
        start local 4 // java.lang.Throwable e2
        15: .line 95
            aload 3 /* e */
            aload 4 /* e2 */
            invokevirtual java.lang.RuntimeException.addSuppressed:(Ljava/lang/Throwable;)V
        16: .line 96
            aload 0 /* root */
            ifnonnull 19
        17: .line 97
            aload 3 /* e */
            astore 0 /* root */
        18: .line 98
            goto 20
        19: .line 99
      StackMap locals: java.lang.Throwable
      StackMap stack:
            aload 0 /* root */
            aload 3 /* e */
            invokevirtual java.lang.RuntimeException.addSuppressed:(Ljava/lang/Throwable;)V
        end local 4 // java.lang.Throwable e2
        end local 3 // java.lang.RuntimeException e
        end local 1 // org.h2.engine.Database database
        20: .line 83
      StackMap locals: java.lang.RuntimeException top java.util.Iterator
      StackMap stack:
            aload 2
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 8
        21: .line 104
            aload 0 /* root */
            ifnull 23
        22: .line 105
            aload 0 /* root */
            athrow
        23: .line 107
      StackMap locals: java.lang.RuntimeException
      StackMap stack:
            return
        end local 0 // java.lang.RuntimeException root
      LocalVariableTable:
        Start  End  Slot      Name  Signature
            7   24     0      root  Ljava/lang/RuntimeException;
            9   20     1  database  Lorg/h2/engine/Database;
           12   20     3         e  Ljava/lang/RuntimeException;
           15   20     4        e2  Ljava/lang/Throwable;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
           9    10      11  Class java.lang.RuntimeException
          12    13      14  Class java.lang.Throwable

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.h2.engine.OnExitDatabaseCloser this
         0: .line 109
            aload 0 /* this */
            invokespecial java.lang.Thread.<init>:()V
         1: .line 110
            return
        end local 0 // org.h2.engine.OnExitDatabaseCloser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/h2/engine/OnExitDatabaseCloser;

  public void run();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=1, args_size=1
        start local 0 // org.h2.engine.OnExitDatabaseCloser this
         0: .line 114
            invokestatic org.h2.engine.OnExitDatabaseCloser.onShutdown:()V
         1: .line 115
            return
        end local 0 // org.h2.engine.OnExitDatabaseCloser this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/h2/engine/OnExitDatabaseCloser;
}
SourceFile: "OnExitDatabaseCloser.java"