From 4e63ea72013972c13d8ccf6fd7279d6119063287 Mon Sep 17 00:00:00 2001 From: Dan <46821332+nsadeveloper789@users.noreply.github.com> Date: Thu, 15 May 2025 18:05:30 +0000 Subject: [PATCH] GP-5673: Fix hang at launch caused by repeated filtering of registers table. --- .../debug/gui/register/DebuggerRegistersProvider.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java index f9fb1f73cd..87d54e8eae 100644 --- a/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java +++ b/Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/register/DebuggerRegistersProvider.java @@ -1262,22 +1262,26 @@ public class DebuggerRegistersProvider extends ComponentProviderAdapter protected void displaySelectedRegisters(Set selected) { List regs = current.getPlatform().getLanguage().getRegisters(); + List toDelete = new ArrayList<>(); for (Iterator> it = regMap.entrySet().iterator(); it .hasNext();) { Map.Entry ent = it.next(); if (!selected.contains(ent.getKey())) { - regsTableModel.delete(ent.getValue()); + toDelete.add(ent.getValue()); it.remove(); } } + regsTableModel.deleteWith(toDelete::contains); + List toAdd = new ArrayList<>(); for (Register reg : selected) { regMap.computeIfAbsent(reg, r -> { RegisterRow row = new RegisterRow(this, regs.indexOf(reg), reg); - regsTableModel.add(row); + toAdd.add(row); return row; }); } + regsTableModel.addAll(toAdd); } protected CompletableFuture loadRegistersAndValues() {