From daf2306fcd7e8a6601f7eaf5e8e4fcb9793162f9 Mon Sep 17 00:00:00 2001 From: ghidra1 Date: Fri, 26 Jun 2026 10:43:42 -0400 Subject: [PATCH] GP-1 Minor fixes back-ported from GP-6779: project in-use tracking, data type archive address factory --- .../java/ghidra/framework/data/DefaultProjectData.java | 6 ++---- .../main/java/ghidra/framework/data/GhidraFileData.java | 7 +++++++ .../program/model/data/StandAloneDataTypeManager.java | 8 +++++++- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java index b0bd424482..ce4aee0b1f 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/DefaultProjectData.java @@ -1263,11 +1263,9 @@ public class DefaultProjectData implements ProjectData { @Override public void close() { synchronized (this) { - if (!closed) { - closed = true; - } + closed = true; if (inUseCount != 0) { - return; // delay dispose + return; // delay dispose while still in-use } } dispose(); diff --git a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java index 337c68d979..3dc3db83ca 100644 --- a/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java +++ b/Ghidra/Framework/Project/src/main/java/ghidra/framework/data/GhidraFileData.java @@ -656,6 +656,13 @@ public class GhidraFileData { DomainFileProxy proxy = new DomainFileProxy(name, parent.getPathname(), doa, DomainFile.DEFAULT_VERSION, fileID, parent.getProjectLocator()); proxy.setLastModified(getLastModifiedTime()); + + // Notify file manager of in-use domain object. + // A link-file object is indirect with tracking intiated by the URL-referenced file. + if (!isLink()) { + projectData.trackDomainFileInUse(doa); + } + return doa; } myFolderItem = folderItem; diff --git a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java index 1326596935..c2ce47e033 100644 --- a/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java +++ b/Ghidra/Framework/SoftwareModeling/src/main/java/ghidra/program/model/data/StandAloneDataTypeManager.java @@ -437,6 +437,8 @@ public class StandAloneDataTypeManager extends DataTypeManagerDB implements Clos final Language lang = language; final CompilerSpec cspec = compilerSpec; + + // Use ProgramAddressFactory to provide stack space final AddressFactory addrFactory = new ProgramAddressFactory(lang, cspec, s -> null); super.setProgramArchitecture(new ProgramArchitecture() { @@ -733,6 +735,10 @@ public class StandAloneDataTypeManager extends DataTypeManagerDB implements Clos } } + // Use ProgramAddressFactory to provide stack space + final AddressFactory addrFactory = + new ProgramAddressFactory(language, compilerSpec, s -> null); + ProgramArchitecture programArchitecture = new ProgramArchitecture() { @Override @@ -747,7 +753,7 @@ public class StandAloneDataTypeManager extends DataTypeManagerDB implements Clos @Override public AddressFactory getAddressFactory() { - return language.getAddressFactory(); + return addrFactory; } };