diff options
-rw-r--r-- | llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBProcesses.java | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBProcesses.java b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBProcesses.java index 06da8c1788a..b1ba289f876 100644 --- a/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBProcesses.java +++ b/llvm/org.eclipse.cdt.llvm.dsf.lldb.core/src/org/eclipse/cdt/llvm/dsf/lldb/core/internal/service/LLDBProcesses.java @@ -103,34 +103,41 @@ public class LLDBProcesses extends GDBProcesses_7_4 { @Override public void getExecutionData(IThreadDMContext dmc, DataRequestMonitor<IThreadDMData> rm) { - if (dmc instanceof IMIProcessDMContext) { - String pidStr = ((IMIProcessDMContext) dmc).getProcId(); - int pid = -1; - try { - pid = Integer.parseInt(pidStr); - } catch (NumberFormatException e) { - } - - // It's possible that we get here without getRunningProcesses called - // yet so the process names map will be empty. This can happen when - // doing local debugging but not attach mode. - if (fProcessNames.isEmpty()) { - // FIXME: This triggers a double done()!! (Bug 510833) - getRunningProcesses(dmc, new DataRequestMonitor<>(getExecutor(), rm)); - } - - String name = fProcessNames.get(pid); - if (name == null) { - name = Messages.LLDBProcesses_unknown_process_name; - } + if (!(dmc instanceof IMIProcessDMContext)) { + super.getExecutionData(dmc, rm); + return; + } - rm.setData(new LLDBMIThreadDMData(name, pidStr)); - rm.done(); + String pidStr = ((IMIProcessDMContext) dmc).getProcId(); + int pid = -1; + try { + pid = Integer.parseInt(pidStr); + } catch (NumberFormatException e) { + } + int pid2 = pid; + + // It's possible that we get here without getRunningProcesses called + // yet so the process names map will be empty. This can happen when + // doing local debugging but not attach mode. + if (fProcessNames.isEmpty()) { + getRunningProcesses(dmc, new DataRequestMonitor<IProcessDMContext[]>(getExecutor(), rm) { + @Override + protected void handleSuccess() { + rm.setData(new LLDBMIThreadDMData(getProcessName(pid2), pidStr)); + super.handleSuccess(); + } + }); } else { - super.getExecutionData(dmc, rm); + rm.setData(new LLDBMIThreadDMData(getProcessName(pid2), pidStr)); + rm.done(); } } + private String getProcessName(int pid) { + String name = fProcessNames.get(pid); + return name != null ? name : Messages.LLDBProcesses_unknown_process_name; + } + private static class LLDBMIThreadDMData implements IThreadDMData { final String fName; final String fId; |