From 8eaf15764b2d3e6f2dda7523d0e2cf1863788c29 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Wed, 18 Jan 2023 16:11:40 -0500 Subject: [PATCH] GP-1484: Sort out race for default trace naming during auto-save. --- .../DebuggerTraceManagerServicePlugin.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java index 273db9727d..e97af18a96 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/tracemgr/DebuggerTraceManagerServicePlugin.java @@ -905,13 +905,7 @@ public class DebuggerTraceManagerServicePlugin extends Plugin }); } else { - String filename = trace.getName(); DomainFolder root = tool.getProject().getProjectData().getRootFolder(); - DomainFile existing = root.getFile(filename); - for (int i = 1; existing != null; i++) { - filename = trace.getName() + "." + i; - existing = root.getFile(filename); - } DomainFolder traces; try { traces = createOrGetFolder(tool, "Save New Trace", root, NEW_TRACES_FOLDER_NAME); @@ -920,12 +914,20 @@ public class DebuggerTraceManagerServicePlugin extends Plugin throw new AssertionError(e); } - final String finalFilename = filename; new TaskLauncher(new Task("Save New Trace", true, true, true) { @Override public void run(TaskMonitor monitor) throws CancelledException { + String filename = trace.getName(); try (DomainObjectLockHold hold = maybeLock(trace, force)) { - traces.createFile(finalFilename, trace, monitor); + for (int i = 1;; i++) { + try { + traces.createFile(filename, trace, monitor); + break; + } + catch (DuplicateFileException e) { + filename = trace.getName() + "." + i; + } + } trace.save("Initial save", monitor); future.complete(null); }