diff options
author | Marc-Andre Laperle | 2018-09-01 06:05:51 +0000 |
---|---|---|
committer | Marc-André Laperle | 2018-09-26 04:33:23 +0000 |
commit | 55245c425223d8db82dea3e6cb1af208fc4cbbfc (patch) | |
tree | a02c45fe089b33d71c67bb4b8258f44e9b69c7b0 /llvm | |
parent | b803d1030c8cc4458b31d3b796a41a43ca8c8051 (diff) | |
download | org.eclipse.cdt-55245c425223d8db82dea3e6cb1af208fc4cbbfc.tar.gz org.eclipse.cdt-55245c425223d8db82dea3e6cb1af208fc4cbbfc.tar.xz org.eclipse.cdt-55245c425223d8db82dea3e6cb1af208fc4cbbfc.zip |
Bug 510833 - [lldb] IllegalStateException in LLDBProcesses$LLDBMIThreadDMData starting session
Re-arrange the code to prevent done() from being called twice.
Change-Id: I25737e9b6a7c188db62381695562046e326cacd0
Signed-off-by: Marc-Andre Laperle <malaperle@gmail.com>
Diffstat (limited to 'llvm')
-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; |