Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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