Merge remote-tracking branch

'origin/GP-4798_ghidra1_CorrectedDTArchiveTransactionError'
(Closes #6768)
This commit is contained in:
ghidra1 2024-07-29 17:58:48 -04:00
commit d88350e718
2 changed files with 20 additions and 8 deletions

View file

@ -319,7 +319,7 @@ abstract public class DataTypeManagerDB implements DataTypeManager {
private void initPackedDatabase(ResourceFile packedDBfile, OpenMode openMode, private void initPackedDatabase(ResourceFile packedDBfile, OpenMode openMode,
TaskMonitor monitor) throws CancelledException, IOException { TaskMonitor monitor) throws CancelledException, IOException {
long txId = dbHandle.startTransaction(); Long txId = dbHandle.startTransaction();
try { try {
init(openMode, monitor); init(openMode, monitor);
@ -337,6 +337,9 @@ abstract public class DataTypeManagerDB implements DataTypeManager {
} }
catch (VersionException e) { catch (VersionException e) {
if (openMode == OpenMode.UPDATE && e.isUpgradable()) { if (openMode == OpenMode.UPDATE && e.isUpgradable()) {
// Try again with UPGRADE mode
dbHandle.endTransaction(txId, true);
txId = null;
initPackedDatabase(packedDBfile, OpenMode.UPGRADE, monitor); initPackedDatabase(packedDBfile, OpenMode.UPGRADE, monitor);
} }
else { else {
@ -345,9 +348,11 @@ abstract public class DataTypeManagerDB implements DataTypeManager {
} }
} }
finally { finally {
if (txId != null) {
dbHandle.endTransaction(txId, true); dbHandle.endTransaction(txId, true);
} }
} }
}
/** /**
* Constructor for a database-backed <code>DataTypeManagerDB</code> extension. * Constructor for a database-backed <code>DataTypeManagerDB</code> extension.

View file

@ -836,7 +836,7 @@ public class StandAloneDataTypeManager extends DataTypeManagerDB implements Clos
} }
protected void initTransactionState() { protected void initTransactionState() {
dbHandle.setMaxUndos(NUM_UNDOS); clearUndo();
} }
@Override @Override
@ -953,6 +953,8 @@ public class StandAloneDataTypeManager extends DataTypeManagerDB implements Clos
protected synchronized void clearUndo() { protected synchronized void clearUndo() {
undoList.clear(); undoList.clear();
redoList.clear(); redoList.clear();
dbHandle.setMaxUndos(0);
dbHandle.setMaxUndos(NUM_UNDOS);
} }
/** /**
@ -1037,7 +1039,12 @@ public class StandAloneDataTypeManager extends DataTypeManagerDB implements Clos
@Override @Override
public synchronized void close() { public synchronized void close() {
clearUndo(); if (dbHandle.isTransactionActive()) {
Msg.error(this, "DTM closed with active transaction",
new RuntimeException("DTM closed with active transaction"));
}
undoList.clear();
redoList.clear();
if (!dbHandle.isClosed()) { if (!dbHandle.isClosed()) {
dbHandle.close(); dbHandle.close();
} }