Skip to main content
aboutsummaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorMarc-Andre Laperle2018-09-01 06:05:51 +0000
committerMarc-André Laperle2018-09-26 04:33:23 +0000
commit55245c425223d8db82dea3e6cb1af208fc4cbbfc (patch)
treea02c45fe089b33d71c67bb4b8258f44e9b69c7b0 /llvm
parentb803d1030c8cc4458b31d3b796a41a43ca8c8051 (diff)
downloadorg.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.java53
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;

Back to the top