diff --git a/Ghidra/Framework/DB/src/main/java/db/buffers/LocalManagedBufferFile.java b/Ghidra/Framework/DB/src/main/java/db/buffers/LocalManagedBufferFile.java index 55c4252dd5..682e0f92e6 100644 --- a/Ghidra/Framework/DB/src/main/java/db/buffers/LocalManagedBufferFile.java +++ b/Ghidra/Framework/DB/src/main/java/db/buffers/LocalManagedBufferFile.java @@ -93,10 +93,11 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu /** * bfMgr manages the various files associated with this buffer * file. When working with versioned files or when Save support is - * required bfMgr must be set. The bufMgr will be null for - * a read-only non-updateable file. + * required bfMgr must be set. The openForUpdate will be false + * for a read-only non-updateable file. */ private BufferFileManager bfMgr; + private boolean openForUpdate = false; /** * checkinId is the checkin ID needed by bfMgr when a new @@ -174,6 +175,7 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu } this.version = 1; this.bfMgr = bfManager; + this.openForUpdate = true; this.checkinId = checkinId; } @@ -191,6 +193,7 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu int minChangeDataVer, long checkinId) throws IOException { super(bfManager.getBufferFile(bfManager.getCurrentVersion()), true); this.bfMgr = bfManager; + this.openForUpdate = true; this.version = bfManager.getCurrentVersion(); this.minChangeDataVer = minChangeDataVer; this.checkinId = checkinId; @@ -200,7 +203,7 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu } /** - * Open an older version of an existing buffer file as read-only and NOT UPDATEABLE (bfMgr remains null). + * Open an older version of an existing buffer file as read-only and NOT UPDATEABLE (openForUpdate remains false). * Version files must exist for all versions starting with the requested version. * These version files will be used in conjunction with the current buffer file * to emulate an older version buffer file. @@ -214,6 +217,7 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu public LocalManagedBufferFile(BufferFileManager bfManager, int version, int minChangeDataVer) throws IOException { super(bfManager.getBufferFile(bfManager.getCurrentVersion()), true); + this.bfMgr = bfManager; this.version = version; this.minChangeDataVer = minChangeDataVer; int curVer = bfManager.getCurrentVersion(); @@ -243,9 +247,6 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu @Override public BufferFile getNextChangeDataFile(boolean getFirst) throws IOException { - if (bfMgr == null) { - return null; - } if (getFirst || nextChangeDataVer == -1) { nextChangeDataVer = minChangeDataVer != -1 ? minChangeDataVer : (version - 1); } @@ -373,8 +374,8 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu super.setReadOnly(); - if (bfMgr != null) { -// TODO: This seems very hidden! + if (openForUpdate) { + openForUpdate = false; bfMgr.versionCreated(version, comment, checkinId); startPreSave(); } @@ -411,7 +412,8 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu // NOTE: the above close will delete non-read-only files which were not committed } finally { - if (bfMgr != null) { + if (openForUpdate) { + openForUpdate = false; if (comit) { bfMgr.versionCreated(version, comment, checkinId); } @@ -454,7 +456,8 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu } } finally { - if (bfMgr != null) { + if (openForUpdate) { + openForUpdate = false; bfMgr.updateEnded(checkinId); } } @@ -462,9 +465,6 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu } private byte[] getForwardModMapData() throws IOException { - if (bfMgr == null) { - return null; - } File mf = bfMgr.getChangeMapFile(); if (mf == null || !mf.exists()) { return null; @@ -480,9 +480,6 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu @Override public byte[] getForwardModMapData(int oldVersion) throws IOException { - if (bfMgr == null) { - return null; - } if (oldVersion < 1 || oldVersion >= version) { throw new IOException("Invalid mod-map version requested: " + oldVersion); } @@ -700,6 +697,7 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu if (saveFile.renameFile(newFile)) { saveFile.version = newVersion; saveFile.bfMgr = bfMgr; + saveFile.openForUpdate = true; saveFile.checkinId = checkinId; if (saveChangeFile != null) { @@ -778,7 +776,7 @@ public class LocalManagedBufferFile extends LocalBufferFile implements ManagedBu synchronized (this) { // If preSaveFile is null and !preSaveFailed - we were unsuccessful at terminating the pre-save - if (endUpdate && bfMgr != null && (preSaveFailed || preSaveFile != null)) { + if (endUpdate && openForUpdate && (preSaveFailed || preSaveFile != null)) { // Update is ended when we can no longer perform a save bfMgr.updateEnded(checkinId);