Class ProgramTransaction

java.lang.Object
ghidra.program.database.util.ProgramTransaction
All Implemented Interfaces:
AutoCloseable

public class ProgramTransaction extends Object implements AutoCloseable
A convenience context for transaction IDs on a Ghidra program database

This is meant to be used as an idiom in a try-with-resources block:

 try (ProgramTransaction t = ProgramTransaction.open(program, "Demo")) {
     program.getMemory().....
     t.commit();
 }
 

This idiom is very useful if there is complex logic in your transaction, it's very easy to forget to close the transaction, especially if an error occurs, leaving the database in an open transaction indefinitely. The try-with-resources block will ensure that the transaction is closed in all circumstances. Note, however, that in order for the transaction to be committed, you must call commit().

Any exceptions within the block will cause t.commit() to be skipped, thus aborting the transaction.

  • Field Details

    • program

      protected Program program
    • tid

      protected int tid
    • commit

      protected boolean commit
  • Method Details

    • open

      public static ProgramTransaction open(Program program, String description)
      Start a transaction on the given program with the given description
      Parameters:
      program - the program to modify
      description - a description of the transaction
    • close

      public void close()
      Finish the transaction

      If this is called before commit(), then the transaction is aborted. This is called automatically at the close of a try-with-resources block.

      Specified by:
      close in interface AutoCloseable
    • commit

      public void commit()
      Finish the transaction, and commit

      This MUST be called in order to commit the transaction. The transaction is not committed until the close of the try-with-resources block.