public class org.hsqldb.TransactionManager2PL extends org.hsqldb.TransactionManagerCommon implements org.hsqldb.TransactionManager
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.hsqldb.TransactionManager2PL
  super_class: org.hsqldb.TransactionManagerCommon
{
  public void <init>(org.hsqldb.Database);
    descriptor: (Lorg/hsqldb/Database;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Database db
         0: .line 50
            aload 0 /* this */
            aload 1 /* db */
            invokespecial org.hsqldb.TransactionManagerCommon.<init>:(Lorg/hsqldb/Database;)V
         1: .line 52
            aload 0 /* this */
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.database:Lorg/hsqldb/Database;
            getfield org.hsqldb.Database.sessionManager:Lorg/hsqldb/SessionManager;
            invokevirtual org.hsqldb.SessionManager.getSysLobSession:()Lorg/hsqldb/Session;
            putfield org.hsqldb.TransactionManager2PL.lobSession:Lorg/hsqldb/Session;
         2: .line 53
            aload 0 /* this */
            iconst_0
            putfield org.hsqldb.TransactionManager2PL.txModel:I
         3: .line 54
            return
        end local 1 // org.hsqldb.Database db
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    4     0  this  Lorg/hsqldb/TransactionManager2PL;
            0    4     1    db  Lorg/hsqldb/Database;
    MethodParameters:
      Name  Flags
      db    

  public long getGlobalChangeTimestamp();
    descriptor: ()J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=1, args_size=1
        start local 0 // org.hsqldb.TransactionManager2PL this
         0: .line 57
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.globalChangeTimestamp:Ljava/util/concurrent/atomic/AtomicLong;
            invokevirtual java.util.concurrent.atomic.AtomicLong.get:()J
            lreturn
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hsqldb/TransactionManager2PL;

  public void setGlobalChangeTimestamp(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // long ts
         0: .line 61
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.globalChangeTimestamp:Ljava/util/concurrent/atomic/AtomicLong;
            lload 1 /* ts */
            invokevirtual java.util.concurrent.atomic.AtomicLong.set:(J)V
         1: .line 62
            return
        end local 1 // long ts
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/hsqldb/TransactionManager2PL;
            0    2     1    ts  J
    MethodParameters:
      Name  Flags
      ts    

  public boolean isMVRows();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hsqldb.TransactionManager2PL this
         0: .line 65
            iconst_0
            ireturn
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hsqldb/TransactionManager2PL;

  public boolean isMVCC();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hsqldb.TransactionManager2PL this
         0: .line 69
            iconst_0
            ireturn
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hsqldb/TransactionManager2PL;

  public boolean is2PL();
    descriptor: ()Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hsqldb.TransactionManager2PL this
         0: .line 73
            iconst_1
            ireturn
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hsqldb/TransactionManager2PL;

  public int getTransactionControl();
    descriptor: ()I
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.hsqldb.TransactionManager2PL this
         0: .line 77
            iconst_0
            ireturn
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hsqldb/TransactionManager2PL;

  public void setTransactionControl(org.hsqldb.Session, int);
    descriptor: (Lorg/hsqldb/Session;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // int mode
         0: .line 81
            aload 0 /* this */
            aload 1 /* session */
            iload 2 /* mode */
            invokespecial org.hsqldb.TransactionManagerCommon.setTransactionControl:(Lorg/hsqldb/Session;I)V
         1: .line 82
            return
        end local 2 // int mode
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    2     1  session  Lorg/hsqldb/Session;
            0    2     2     mode  I
    MethodParameters:
         Name  Flags
      session  
      mode     

  public void completeActions(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 85
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.endActionTPL:(Lorg/hsqldb/Session;)V
         1: .line 86
            return
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    2     1  session  Lorg/hsqldb/Session;
    MethodParameters:
         Name  Flags
      session  

  public boolean prepareCommitActions(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 90
            aload 1 /* session */
            aload 0 /* this */
            invokevirtual org.hsqldb.TransactionManager2PL.getNextGlobalChangeTimestamp:()J
            putfield org.hsqldb.Session.actionTimestamp:J
         1: .line 92
            iconst_1
            ireturn
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    2     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    2     1  session  Lorg/hsqldb/Session;
    MethodParameters:
         Name  Flags
      session  

  public boolean commitTransaction(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 97
            aload 1 /* session */
            getfield org.hsqldb.Session.abortTransaction:Z
            ifeq 2
         1: .line 98
            iconst_0
            ireturn
         2: .line 101
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock:()V
         3: .line 104
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            invokevirtual org.hsqldb.lib.HsqlArrayList.size:()I
            istore 2 /* limit */
        start local 2 // int limit
         4: .line 107
            aload 1 /* session */
            aload 0 /* this */
            invokevirtual org.hsqldb.TransactionManager2PL.getNextGlobalChangeTimestamp:()J
            putfield org.hsqldb.Session.actionTimestamp:J
         5: .line 108
            aload 1 /* session */
            aload 1 /* session */
            getfield org.hsqldb.Session.actionTimestamp:J
            putfield org.hsqldb.Session.transactionEndTimestamp:J
         6: .line 110
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.endTransaction:(Lorg/hsqldb/Session;)V
         7: .line 112
            iconst_0
            istore 3 /* i */
        start local 3 // int i
         8: goto 12
         9: .line 113
      StackMap locals: int int
      StackMap stack:
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            iload 3 /* i */
            invokevirtual org.hsqldb.lib.HsqlArrayList.get:(I)Ljava/lang/Object;
            checkcast org.hsqldb.RowAction
            astore 4 /* action */
        start local 4 // org.hsqldb.RowAction action
        10: .line 115
            aload 4 /* action */
            aload 1 /* session */
            invokevirtual org.hsqldb.RowAction.commit:(Lorg/hsqldb/Session;)I
            pop
        end local 4 // org.hsqldb.RowAction action
        11: .line 112
            iinc 3 /* i */ 1
      StackMap locals:
      StackMap stack:
        12: iload 3 /* i */
            iload 2 /* limit */
            if_icmplt 9
        end local 3 // int i
        13: .line 118
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.adjustLobUsage:(Lorg/hsqldb/Session;)V
        14: .line 119
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.persistCommit:(Lorg/hsqldb/Session;)V
        15: .line 121
            aload 1 /* session */
            iconst_0
            putfield org.hsqldb.Session.isTransaction:Z
        16: .line 123
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.endTransactionTPL:(Lorg/hsqldb/Session;)V
        end local 2 // int limit
        17: .line 124
            goto 21
      StackMap locals: org.hsqldb.TransactionManager2PL org.hsqldb.Session
      StackMap stack: java.lang.Throwable
        18: astore 5
        19: .line 125
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
        20: .line 126
            aload 5
            athrow
        21: .line 125
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
        22: .line 128
            aload 1 /* session */
            getfield org.hsqldb.Session.tempSet:Lorg/hsqldb/lib/OrderedHashSet;
            invokevirtual org.hsqldb.lib.OrderedHashSet.clear:()V
        23: .line 130
            iconst_1
            ireturn
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   24     0     this  Lorg/hsqldb/TransactionManager2PL;
            0   24     1  session  Lorg/hsqldb/Session;
            4   17     2    limit  I
            8   13     3        i  I
           10   11     4   action  Lorg/hsqldb/RowAction;
      Exception table:
        from    to  target  type
           3    18      18  any
    MethodParameters:
         Name  Flags
      session  

  public void rollback(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=3, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 135
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock:()V
         1: .line 138
            aload 1 /* session */
            iconst_0
            putfield org.hsqldb.Session.abortTransaction:Z
         2: .line 139
            aload 1 /* session */
            aload 0 /* this */
            invokevirtual org.hsqldb.TransactionManager2PL.getNextGlobalChangeTimestamp:()J
            putfield org.hsqldb.Session.actionTimestamp:J
         3: .line 140
            aload 1 /* session */
            aload 1 /* session */
            getfield org.hsqldb.Session.actionTimestamp:J
            putfield org.hsqldb.Session.transactionEndTimestamp:J
         4: .line 142
            aload 0 /* this */
            aload 1 /* session */
            iconst_0
            aload 1 /* session */
            getfield org.hsqldb.Session.transactionTimestamp:J
            invokevirtual org.hsqldb.TransactionManager2PL.rollbackPartial:(Lorg/hsqldb/Session;IJ)V
         5: .line 143
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.endTransaction:(Lorg/hsqldb/Session;)V
         6: .line 144
            aload 1 /* session */
            invokevirtual org.hsqldb.Session.logSequences:()V
         7: .line 146
            aload 1 /* session */
            iconst_0
            putfield org.hsqldb.Session.isTransaction:Z
         8: .line 148
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.endTransactionTPL:(Lorg/hsqldb/Session;)V
         9: .line 149
            goto 13
      StackMap locals:
      StackMap stack: java.lang.Throwable
        10: astore 2
        11: .line 150
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
        12: .line 151
            aload 2
            athrow
        13: .line 150
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
        14: .line 152
            return
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   15     0     this  Lorg/hsqldb/TransactionManager2PL;
            0   15     1  session  Lorg/hsqldb/Session;
      Exception table:
        from    to  target  type
           1    10      10  any
    MethodParameters:
         Name  Flags
      session  

  public void rollbackSavepoint(org.hsqldb.Session, int);
    descriptor: (Lorg/hsqldb/Session;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=7, args_size=3
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // int index
         0: .line 156
            aload 1 /* session */
            getfield org.hsqldb.Session.sessionContext:Lorg/hsqldb/SessionContext;
            getfield org.hsqldb.SessionContext.savepointTimestamps:Lorg/hsqldb/lib/LongDeque;
            iload 2 /* index */
            invokevirtual org.hsqldb.lib.LongDeque.get:(I)J
            lstore 3 /* timestamp */
        start local 3 // long timestamp
         1: .line 157
            aload 1 /* session */
            getfield org.hsqldb.Session.sessionContext:Lorg/hsqldb/SessionContext;
            getfield org.hsqldb.SessionContext.savepoints:Lorg/hsqldb/lib/HashMappedList;
            iload 2 /* index */
            invokevirtual org.hsqldb.lib.HashMappedList.get:(I)Ljava/lang/Object;
            checkcast java.lang.Integer
            astore 5 /* oi */
        start local 5 // java.lang.Integer oi
         2: .line 158
            aload 5 /* oi */
            invokevirtual java.lang.Integer.intValue:()I
            istore 6 /* start */
        start local 6 // int start
         3: .line 160
            goto 8
         4: .line 161
      StackMap locals: long java.lang.Integer int
      StackMap stack:
            aload 1 /* session */
            getfield org.hsqldb.Session.sessionContext:Lorg/hsqldb/SessionContext;
            getfield org.hsqldb.SessionContext.savepoints:Lorg/hsqldb/lib/HashMappedList;
         5: .line 162
            aload 1 /* session */
            getfield org.hsqldb.Session.sessionContext:Lorg/hsqldb/SessionContext;
            getfield org.hsqldb.SessionContext.savepoints:Lorg/hsqldb/lib/HashMappedList;
            invokevirtual org.hsqldb.lib.HashMappedList.size:()I
            iconst_1
            isub
         6: .line 161
            invokevirtual org.hsqldb.lib.HashMappedList.remove:(I)Ljava/lang/Object;
            pop
         7: .line 163
            aload 1 /* session */
            getfield org.hsqldb.Session.sessionContext:Lorg/hsqldb/SessionContext;
            getfield org.hsqldb.SessionContext.savepointTimestamps:Lorg/hsqldb/lib/LongDeque;
            invokevirtual org.hsqldb.lib.LongDeque.removeLast:()J
            pop2
         8: .line 160
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            getfield org.hsqldb.Session.sessionContext:Lorg/hsqldb/SessionContext;
            getfield org.hsqldb.SessionContext.savepoints:Lorg/hsqldb/lib/HashMappedList;
            invokevirtual org.hsqldb.lib.HashMappedList.size:()I
            iload 2 /* index */
            iconst_1
            iadd
            if_icmpgt 4
         9: .line 166
            aload 0 /* this */
            aload 1 /* session */
            iload 6 /* start */
            lload 3 /* timestamp */
            invokevirtual org.hsqldb.TransactionManager2PL.rollbackPartial:(Lorg/hsqldb/Session;IJ)V
        10: .line 167
            return
        end local 6 // int start
        end local 5 // java.lang.Integer oi
        end local 3 // long timestamp
        end local 2 // int index
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   11     0       this  Lorg/hsqldb/TransactionManager2PL;
            0   11     1    session  Lorg/hsqldb/Session;
            0   11     2      index  I
            1   11     3  timestamp  J
            2   11     5         oi  Ljava/lang/Integer;
            3   11     6      start  I
    MethodParameters:
         Name  Flags
      session  
      index    

  public void rollbackAction(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 171
            aload 0 /* this */
            aload 1 /* session */
            aload 1 /* session */
            getfield org.hsqldb.Session.actionIndex:I
         1: .line 172
            aload 1 /* session */
            getfield org.hsqldb.Session.actionStartTimestamp:J
         2: .line 171
            invokevirtual org.hsqldb.TransactionManager2PL.rollbackPartial:(Lorg/hsqldb/Session;IJ)V
         3: .line 173
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.endActionTPL:(Lorg/hsqldb/Session;)V
         4: .line 174
            return
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    5     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    5     1  session  Lorg/hsqldb/Session;
    MethodParameters:
         Name  Flags
      session  

  public void rollbackPartial(org.hsqldb.Session, int, long);
    descriptor: (Lorg/hsqldb/Session;IJ)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=5, locals=10, args_size=4
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // int start
        start local 3 // long timestamp
         0: .line 182
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            invokevirtual org.hsqldb.lib.HsqlArrayList.size:()I
            istore 5 /* limit */
        start local 5 // int limit
         1: .line 184
            iload 2 /* start */
            iload 5 /* limit */
            if_icmpne 3
         2: .line 185
            return
         3: .line 188
      StackMap locals: int
      StackMap stack:
            iload 5 /* limit */
            iconst_1
            isub
            istore 6 /* i */
        start local 6 // int i
         4: goto 18
         5: .line 189
      StackMap locals: int
      StackMap stack:
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            iload 6 /* i */
            invokevirtual org.hsqldb.lib.HsqlArrayList.get:(I)Ljava/lang/Object;
            checkcast org.hsqldb.RowAction
            astore 7 /* action */
        start local 7 // org.hsqldb.RowAction action
         6: .line 191
            aload 7 /* action */
            ifnull 17
            aload 7 /* action */
            getfield org.hsqldb.RowAction.type:B
            ifeq 17
         7: .line 192
            aload 7 /* action */
            getfield org.hsqldb.RowAction.type:B
            iconst_3
            if_icmpne 9
         8: .line 193
            goto 17
         9: .line 196
      StackMap locals: org.hsqldb.RowAction
      StackMap stack:
            aload 7 /* action */
            getfield org.hsqldb.RowAction.memoryRow:Lorg/hsqldb/Row;
            astore 8 /* row */
        start local 8 // org.hsqldb.Row row
        10: .line 198
            aload 8 /* row */
            ifnonnull 12
        11: .line 199
            aload 7 /* action */
            getfield org.hsqldb.RowAction.store:Lorg/hsqldb/persist/PersistentStore;
            aload 7 /* action */
            invokevirtual org.hsqldb.RowAction.getPos:()J
            iconst_0
            invokeinterface org.hsqldb.persist.PersistentStore.get:(JZ)Lorg/hsqldb/persist/CachedObject;
            checkcast org.hsqldb.Row
            astore 8 /* row */
        12: .line 202
      StackMap locals: org.hsqldb.Row
      StackMap stack:
            aload 8 /* row */
            ifnonnull 14
        13: .line 203
            goto 17
        14: .line 206
      StackMap locals:
      StackMap stack:
            aload 7 /* action */
            aload 1 /* session */
            lload 3 /* timestamp */
            invokevirtual org.hsqldb.RowAction.rollback:(Lorg/hsqldb/Session;J)V
        15: .line 208
            aload 7 /* action */
            aload 1 /* session */
            lload 3 /* timestamp */
            aload 8 /* row */
            invokevirtual org.hsqldb.RowAction.mergeRollback:(Lorg/hsqldb/Session;JLorg/hsqldb/Row;)I
            istore 9 /* type */
        start local 9 // int type
        16: .line 210
            aload 7 /* action */
            getfield org.hsqldb.RowAction.store:Lorg/hsqldb/persist/PersistentStore;
            aload 1 /* session */
            aload 8 /* row */
            iload 9 /* type */
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.txModel:I
            invokeinterface org.hsqldb.persist.PersistentStore.rollbackRow:(Lorg/hsqldb/Session;Lorg/hsqldb/Row;II)V
        end local 9 // int type
        end local 8 // org.hsqldb.Row row
        end local 7 // org.hsqldb.RowAction action
        17: .line 188
      StackMap locals:
      StackMap stack:
            iinc 6 /* i */ -1
      StackMap locals:
      StackMap stack:
        18: iload 6 /* i */
            iload 2 /* start */
            if_icmpge 5
        end local 6 // int i
        19: .line 213
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            iload 2 /* start */
            invokevirtual org.hsqldb.lib.HsqlArrayList.setSize:(I)V
        20: .line 214
            return
        end local 5 // int limit
        end local 3 // long timestamp
        end local 2 // int start
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   21     0       this  Lorg/hsqldb/TransactionManager2PL;
            0   21     1    session  Lorg/hsqldb/Session;
            0   21     2      start  I
            0   21     3  timestamp  J
            1   21     5      limit  I
            4   19     6          i  I
            6   17     7     action  Lorg/hsqldb/RowAction;
           10   17     8        row  Lorg/hsqldb/Row;
           16   17     9       type  I
    MethodParameters:
           Name  Flags
      session    
      start      
      timestamp  

  public org.hsqldb.RowAction addDeleteAction(org.hsqldb.Session, org.hsqldb.Table, org.hsqldb.persist.PersistentStore, org.hsqldb.Row, int[]);
    descriptor: (Lorg/hsqldb/Session;Lorg/hsqldb/Table;Lorg/hsqldb/persist/PersistentStore;Lorg/hsqldb/Row;[I)Lorg/hsqldb/RowAction;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=8, args_size=6
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // org.hsqldb.Table table
        start local 3 // org.hsqldb.persist.PersistentStore store
        start local 4 // org.hsqldb.Row row
        start local 5 // int[] colMap
         0: .line 222
            aload 4 /* row */
            dup
            astore 7
            monitorenter
         1: .line 223
            aload 1 /* session */
            aload 2 /* table */
            aload 4 /* row */
            aload 5 /* colMap */
            invokestatic org.hsqldb.RowAction.addDeleteAction:(Lorg/hsqldb/Session;Lorg/hsqldb/TableBase;Lorg/hsqldb/Row;[I)Lorg/hsqldb/RowAction;
            astore 6 /* action */
        start local 6 // org.hsqldb.RowAction action
         2: .line 222
            aload 7
            monitorexit
         3: goto 6
        end local 6 // org.hsqldb.RowAction action
      StackMap locals: org.hsqldb.TransactionManager2PL org.hsqldb.Session org.hsqldb.Table org.hsqldb.persist.PersistentStore org.hsqldb.Row int[] top org.hsqldb.Row
      StackMap stack: java.lang.Throwable
         4: aload 7
            monitorexit
         5: athrow
        start local 6 // org.hsqldb.RowAction action
         6: .line 226
      StackMap locals: org.hsqldb.TransactionManager2PL org.hsqldb.Session org.hsqldb.Table org.hsqldb.persist.PersistentStore org.hsqldb.Row int[] org.hsqldb.RowAction
      StackMap stack:
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            aload 6 /* action */
            invokevirtual org.hsqldb.lib.HsqlArrayList.add:(Ljava/lang/Object;)Z
            pop
         7: .line 227
            aload 3 /* store */
            aload 1 /* session */
            aload 4 /* row */
            invokeinterface org.hsqldb.persist.PersistentStore.delete:(Lorg/hsqldb/Session;Lorg/hsqldb/Row;)V
         8: .line 229
            aload 4 /* row */
            aconst_null
            putfield org.hsqldb.Row.rowAction:Lorg/hsqldb/RowAction;
         9: .line 231
            aload 6 /* action */
            areturn
        end local 6 // org.hsqldb.RowAction action
        end local 5 // int[] colMap
        end local 4 // org.hsqldb.Row row
        end local 3 // org.hsqldb.persist.PersistentStore store
        end local 2 // org.hsqldb.Table table
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0   10     0     this  Lorg/hsqldb/TransactionManager2PL;
            0   10     1  session  Lorg/hsqldb/Session;
            0   10     2    table  Lorg/hsqldb/Table;
            0   10     3    store  Lorg/hsqldb/persist/PersistentStore;
            0   10     4      row  Lorg/hsqldb/Row;
            0   10     5   colMap  [I
            2    4     6   action  Lorg/hsqldb/RowAction;
            6   10     6   action  Lorg/hsqldb/RowAction;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    MethodParameters:
         Name  Flags
      session  
      table    
      store    
      row      
      colMap   

  public void addInsertAction(org.hsqldb.Session, org.hsqldb.Table, org.hsqldb.persist.PersistentStore, org.hsqldb.Row, int[]);
    descriptor: (Lorg/hsqldb/Session;Lorg/hsqldb/Table;Lorg/hsqldb/persist/PersistentStore;Lorg/hsqldb/Row;[I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=7, args_size=6
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // org.hsqldb.Table table
        start local 3 // org.hsqldb.persist.PersistentStore store
        start local 4 // org.hsqldb.Row row
        start local 5 // int[] changedColumns
         0: .line 238
            aload 4 /* row */
            getfield org.hsqldb.Row.rowAction:Lorg/hsqldb/RowAction;
            astore 6 /* action */
        start local 6 // org.hsqldb.RowAction action
         1: .line 240
            aload 6 /* action */
            ifnonnull 5
         2: .line 245
            sipush 458
         3: .line 246
            ldc "null insert action "
         4: .line 245
            invokestatic org.hsqldb.error.Error.runtimeError:(ILjava/lang/String;)Ljava/lang/RuntimeException;
            athrow
         5: .line 249
      StackMap locals: org.hsqldb.RowAction
      StackMap stack:
            aload 3 /* store */
            aload 1 /* session */
            aload 4 /* row */
            invokeinterface org.hsqldb.persist.PersistentStore.indexRow:(Lorg/hsqldb/Session;Lorg/hsqldb/Row;)V
         6: .line 251
            aload 2 /* table */
            getfield org.hsqldb.Table.persistenceScope:I
            bipush 20
            if_icmpne 9
         7: .line 252
            aload 4 /* row */
            aconst_null
            putfield org.hsqldb.Row.rowAction:Lorg/hsqldb/RowAction;
         8: .line 254
            return
         9: .line 257
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            aload 6 /* action */
            invokevirtual org.hsqldb.lib.HsqlArrayList.add:(Ljava/lang/Object;)Z
            pop
        10: .line 259
            aload 4 /* row */
            aconst_null
            putfield org.hsqldb.Row.rowAction:Lorg/hsqldb/RowAction;
        11: .line 260
            return
        end local 6 // org.hsqldb.RowAction action
        end local 5 // int[] changedColumns
        end local 4 // org.hsqldb.Row row
        end local 3 // org.hsqldb.persist.PersistentStore store
        end local 2 // org.hsqldb.Table table
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot            Name  Signature
            0   12     0            this  Lorg/hsqldb/TransactionManager2PL;
            0   12     1         session  Lorg/hsqldb/Session;
            0   12     2           table  Lorg/hsqldb/Table;
            0   12     3           store  Lorg/hsqldb/persist/PersistentStore;
            0   12     4             row  Lorg/hsqldb/Row;
            0   12     5  changedColumns  [I
            1   12     6          action  Lorg/hsqldb/RowAction;
    MethodParameters:
                Name  Flags
      session         
      table           
      store           
      row             
      changedColumns  

  public void addInsertAction(org.hsqldb.Session, org.hsqldb.persist.PersistentStore, org.hsqldb.Row);
    descriptor: (Lorg/hsqldb/Session;Lorg/hsqldb/persist/PersistentStore;Lorg/hsqldb/Row;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=4
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // org.hsqldb.persist.PersistentStore store
        start local 3 // org.hsqldb.Row row
         0: .line 265
            aload 3 /* row */
            getfield org.hsqldb.Row.rowAction:Lorg/hsqldb/RowAction;
            astore 4 /* action */
        start local 4 // org.hsqldb.RowAction action
         1: .line 267
            aload 4 /* action */
            ifnonnull 5
         2: .line 268
            sipush 458
         3: .line 269
            ldc "null insert action "
         4: .line 268
            invokestatic org.hsqldb.error.Error.runtimeError:(ILjava/lang/String;)Ljava/lang/RuntimeException;
            athrow
         5: .line 272
      StackMap locals: org.hsqldb.RowAction
      StackMap stack:
            aload 2 /* store */
            aload 1 /* session */
            aload 3 /* row */
            invokeinterface org.hsqldb.persist.PersistentStore.indexRow:(Lorg/hsqldb/Session;Lorg/hsqldb/Row;)V
         6: .line 273
            aload 1 /* session */
            getfield org.hsqldb.Session.rowActionList:Lorg/hsqldb/lib/HsqlArrayList;
            aload 4 /* action */
            invokevirtual org.hsqldb.lib.HsqlArrayList.add:(Ljava/lang/Object;)Z
            pop
         7: .line 275
            aload 3 /* row */
            aconst_null
            putfield org.hsqldb.Row.rowAction:Lorg/hsqldb/RowAction;
         8: .line 276
            return
        end local 4 // org.hsqldb.RowAction action
        end local 3 // org.hsqldb.Row row
        end local 2 // org.hsqldb.persist.PersistentStore store
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    9     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    9     1  session  Lorg/hsqldb/Session;
            0    9     2    store  Lorg/hsqldb/persist/PersistentStore;
            0    9     3      row  Lorg/hsqldb/Row;
            1    9     4   action  Lorg/hsqldb/RowAction;
    MethodParameters:
         Name  Flags
      session  
      store    
      row      

  public void beginTransaction(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 280
            aload 1 /* session */
            getfield org.hsqldb.Session.isTransaction:Z
            ifne 2
         1: .line 281
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.beginTransactionCommon:(Lorg/hsqldb/Session;)V
         2: .line 283
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    3     1  session  Lorg/hsqldb/Session;
    MethodParameters:
         Name  Flags
      session  

  public void beginAction(org.hsqldb.Session, org.hsqldb.Statement);
    descriptor: (Lorg/hsqldb/Session;Lorg/hsqldb/Statement;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // org.hsqldb.Statement cs
         0: .line 291
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lock:()V
         1: .line 294
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.hasExpired:Z
            ifeq 5
         2: .line 295
            aload 1 /* session */
            iconst_1
            putfield org.hsqldb.Session.redoAction:Z
         3: .line 325
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
         4: .line 297
            return
         5: .line 300
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* session */
            aload 2 /* cs */
            invokevirtual org.hsqldb.TransactionManager2PL.updateCurrentStatement:(Lorg/hsqldb/Session;Lorg/hsqldb/Statement;)Lorg/hsqldb/Statement;
            astore 2 /* cs */
         6: .line 302
            aload 2 /* cs */
            ifnonnull 9
         7: .line 325
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
         8: .line 303
            return
         9: .line 306
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* session */
            aload 2 /* cs */
            invokevirtual org.hsqldb.TransactionManager2PL.setWaitedSessionsTPL:(Lorg/hsqldb/Session;Lorg/hsqldb/Statement;)Z
            istore 3 /* canProceed */
        start local 3 // boolean canProceed
        10: .line 308
            iload 3 /* canProceed */
            ifeq 17
        11: .line 309
            aload 1 /* session */
            iconst_1
            putfield org.hsqldb.Session.isPreTransaction:Z
        12: .line 311
            aload 1 /* session */
            getfield org.hsqldb.Session.tempSet:Lorg/hsqldb/lib/OrderedHashSet;
            invokevirtual org.hsqldb.lib.OrderedHashSet.isEmpty:()Z
            ifeq 15
        13: .line 312
            aload 0 /* this */
            aload 1 /* session */
            aload 2 /* cs */
            invokevirtual org.hsqldb.TransactionManager2PL.lockTablesTPL:(Lorg/hsqldb/Session;Lorg/hsqldb/Statement;)V
        14: .line 316
            goto 22
        15: .line 317
      StackMap locals: int
      StackMap stack:
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.setWaitingSessionTPL:(Lorg/hsqldb/Session;)V
        16: .line 319
            goto 22
        17: .line 322
      StackMap locals:
      StackMap stack:
            aload 1 /* session */
            iconst_1
            putfield org.hsqldb.Session.abortTransaction:Z
        end local 3 // boolean canProceed
        18: .line 324
            goto 22
      StackMap locals: org.hsqldb.TransactionManager2PL org.hsqldb.Session org.hsqldb.Statement
      StackMap stack: java.lang.Throwable
        19: astore 4
        20: .line 325
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
        21: .line 326
            aload 4
            athrow
        22: .line 325
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.writeLock:Ljava/util/concurrent/locks/ReentrantReadWriteLock$WriteLock;
            invokevirtual java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.unlock:()V
        23: .line 327
            return
        end local 2 // org.hsqldb.Statement cs
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   24     0        this  Lorg/hsqldb/TransactionManager2PL;
            0   24     1     session  Lorg/hsqldb/Session;
            0   24     2          cs  Lorg/hsqldb/Statement;
           10   18     3  canProceed  Z
      Exception table:
        from    to  target  type
           1     3      19  any
           5     7      19  any
           9    19      19  any
    MethodParameters:
         Name  Flags
      session  
      cs       

  public void beginActionResume(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 331
            aload 1 /* session */
            getfield org.hsqldb.Session.isTransaction:Z
            ifeq 4
         1: .line 332
            aload 1 /* session */
            aload 0 /* this */
            invokevirtual org.hsqldb.TransactionManager2PL.getNextGlobalChangeTimestamp:()J
            putfield org.hsqldb.Session.actionTimestamp:J
         2: .line 333
            aload 1 /* session */
            aload 1 /* session */
            getfield org.hsqldb.Session.actionTimestamp:J
            putfield org.hsqldb.Session.actionStartTimestamp:J
         3: .line 334
            goto 5
         4: .line 335
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            aload 1 /* session */
            invokevirtual org.hsqldb.TransactionManager2PL.beginTransactionCommon:(Lorg/hsqldb/Session;)V
         5: .line 337
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    6     1  session  Lorg/hsqldb/Session;
    MethodParameters:
         Name  Flags
      session  

  public void removeTransactionInfo(long);
    descriptor: (J)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=3, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // long id
         0: .line 339
            return
        end local 1 // long id
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/hsqldb/TransactionManager2PL;
            0    1     1    id  J
    MethodParameters:
      Name  Flags
      id    

  public void resetSession(org.hsqldb.Session, org.hsqldb.Session, int);
    descriptor: (Lorg/hsqldb/Session;Lorg/hsqldb/Session;I)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
        start local 2 // org.hsqldb.Session targetSession
        start local 3 // int mode
         0: .line 343
            aload 0 /* this */
            aload 1 /* session */
            aload 2 /* targetSession */
            iload 3 /* mode */
            invokespecial org.hsqldb.TransactionManagerCommon.resetSession:(Lorg/hsqldb/Session;Lorg/hsqldb/Session;I)V
         1: .line 344
            return
        end local 3 // int mode
        end local 2 // org.hsqldb.Session targetSession
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    2     0           this  Lorg/hsqldb/TransactionManager2PL;
            0    2     1        session  Lorg/hsqldb/Session;
            0    2     2  targetSession  Lorg/hsqldb/Session;
            0    2     3           mode  I
    MethodParameters:
               Name  Flags
      session        
      targetSession  
      mode           

  private void endTransaction(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=2, args_size=2
        start local 0 // org.hsqldb.TransactionManager2PL this
        start local 1 // org.hsqldb.Session session
         0: .line 348
            aload 1 /* session */
            getfield org.hsqldb.Session.isTransaction:Z
            ifeq 2
         1: .line 349
            aload 0 /* this */
            getfield org.hsqldb.TransactionManager2PL.transactionCount:Ljava/util/concurrent/atomic/AtomicInteger;
            invokevirtual java.util.concurrent.atomic.AtomicInteger.decrementAndGet:()I
            pop
         2: .line 351
      StackMap locals:
      StackMap stack:
            return
        end local 1 // org.hsqldb.Session session
        end local 0 // org.hsqldb.TransactionManager2PL this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    3     0     this  Lorg/hsqldb/TransactionManager2PL;
            0    3     1  session  Lorg/hsqldb/Session;
    MethodParameters:
         Name  Flags
      session  

  public long getNextGlobalChangeTimestamp();
    descriptor: ()J
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=1, args_size=1
         0: .line 1
            aload 0
            invokespecial org.hsqldb.TransactionManagerCommon.getNextGlobalChangeTimestamp:()J
            lreturn
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void abortAction(org.hsqldb.Session);
    descriptor: (Lorg/hsqldb/Session;)V
    flags: (0x1041) ACC_PUBLIC, ACC_BRIDGE, ACC_SYNTHETIC
    Code:
      stack=2, locals=2, args_size=2
         0: .line 1
            aload 0
            aload 1
            invokespecial org.hsqldb.TransactionManagerCommon.abortAction:(Lorg/hsqldb/Session;)V
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature
}
SourceFile: "TransactionManager2PL.java"
InnerClasses:
  public WriteLock = java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock of java.util.concurrent.locks.ReentrantReadWriteLock