Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoreutarass2009-07-09 04:30:58 +0000
committereutarass2009-07-09 04:30:58 +0000
commit57e0537508be9878f45b29d1c5ca51eeda38c0c0 (patch)
treee955c38239e81175adbad1e91a08f7b799318ded
parent167bb172366d295f60aac61cc64a69628f7e046e (diff)
downloadorg.eclipse.tcf-57e0537508be9878f45b29d1c5ca51eeda38c0c0.tar.gz
org.eclipse.tcf-57e0537508be9878f45b29d1c5ca51eeda38c0c0.tar.xz
org.eclipse.tcf-57e0537508be9878f45b29d1c5ca51eeda38c0c0.zip
Moved waitpid() and related code into a separate module: waitpid.[hc]
Processes service: fixed reporting of process exit code.
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchLabelProvider.java14
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java6
-rw-r--r--plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java40
-rw-r--r--plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/model/TCFLaunch.java13
4 files changed, 36 insertions, 37 deletions
diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchLabelProvider.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchLabelProvider.java
index 2379579e1..db58933ca 100644
--- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchLabelProvider.java
+++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/adapters/TCFLaunchLabelProvider.java
@@ -25,9 +25,17 @@ class TCFLaunchLabelProvider implements IElementLabelProvider {
TCFLaunch launch = (TCFLaunch)result.getElement();
result.setImageDescriptor(ImageCache.getImageDescriptor(ImageCache.IMG_TCF), 0);
String status = "";
- if (launch.isConnecting()) status = "Connecting";
- else if (launch.isExited()) status = "Exited";
- else if (launch.isDisconnected()) status = "Disconnected";
+ if (launch.isConnecting()) {
+ status = "Connecting";
+ }
+ else if (launch.isExited()) {
+ status = "Exited";
+ int code = launch.getExitCode();
+ if (code != 0) status += ", exit code " + code;
+ }
+ else if (launch.isDisconnected()) {
+ status = "Disconnected";
+ }
Throwable error = launch.getError();
if (error != null) {
String msg = error.getLocalizedMessage();
diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java
index 4261556d4..e4f9e5539 100644
--- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java
+++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFAnnotationManager.java
@@ -97,7 +97,9 @@ public class TCFAnnotationManager {
public void onConnected(final TCFLaunch launch) {
updateActiveLaunch();
- launch.getBreakpointsStatus().addListener(new ITCFBreakpointListener() {
+ TCFBreakpointsStatus bps = launch.getBreakpointsStatus();
+ if (bps == null) return;
+ bps.addListener(new ITCFBreakpointListener() {
public void breakpointStatusChanged(String id) {
displayExec(new Runnable() {
@@ -281,7 +283,7 @@ public class TCFAnnotationManager {
final TCFLaunch launch = active_launch;
final String[] text = new String[1];
text[0] = breakpoint.getText();
- if (launch != null) {
+ if (launch != null && launch.getBreakpointsStatus() != null) {
Protocol.invokeAndWait(new Runnable() {
public void run() {
TCFBreakpointsStatus bs = launch.getBreakpointsStatus();
diff --git a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java
index 1ae6acc11..27b142554 100644
--- a/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java
+++ b/plugins/org.eclipse.tm.tcf.debug.ui/src/org/eclipse/tm/internal/tcf/debug/ui/model/TCFModel.java
@@ -13,11 +13,9 @@ package org.eclipse.tm.internal.tcf.debug.ui.model;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunch;
@@ -132,16 +130,12 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
new HashMap<String,IMemoryBlockRetrievalExtension>();
private class Console {
- final String id;
final IOConsole console;
final Map<Integer,IOConsoleOutputStream> out;
- Console(String id, final IOConsole console) {
- this.id = id;
+ Console(final IOConsole console) {
this.console = console;
out = new HashMap<Integer,IOConsoleOutputStream>();
- process2console.put(id, this);
- consoles.add(this);
Thread t = new Thread() {
public void run() {
try {
@@ -167,7 +161,6 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
}
void close() {
- if (process2console.get(id) != this) return;
for (IOConsoleOutputStream stream : out.values()) {
try {
stream.close();
@@ -182,12 +175,10 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
catch (IOException x) {
Activator.log("Cannot close console stream", x);
}
- process2console.remove(id);
}
}
- private final Map<String,Console> process2console = new HashMap<String,Console>();
- private final Set<Console> consoles = new HashSet<Console>();
+ private Console console;
private static final Map<ILaunchConfiguration,IEditorInput> editor_not_found =
new HashMap<ILaunchConfiguration,IEditorInput>();
@@ -379,11 +370,8 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
private final IProcesses.ProcessesListener prs_listener = new IProcesses.ProcessesListener() {
public void exited(String process_id, int exit_code) {
- Console console = process2console.get(process_id);
- if (console != null) {
- console.close();
- onLastContextRemoved();
- }
+ IProcesses.ProcessContext prs = launch.getProcessContext();
+ if (prs != null && process_id.equals(prs.getID())) onLastContextRemoved();
}
};
@@ -463,7 +451,6 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
try {
IProcesses.ProcessContext prs = launch.getProcessContext();
if (prs == null || !process_id.equals(prs.getID())) return;
- Console console = process2console.get(process_id);
if (console == null) {
final IOConsole c = new IOConsole("TCF " + process_id, null,
ImageCache.getImageDescriptor(ImageCache.IMG_TCF), "UTF-8", true);
@@ -484,7 +471,7 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
}
}
});
- console = new Console(process_id, c);
+ console = new Console(c);
}
IOConsoleOutputStream stream = console.out.get(stream_id);
if (stream == null) {
@@ -565,11 +552,6 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
private void onLastContextRemoved() {
Protocol.invokeLater(1000, new Runnable() {
public void run() {
- for (Console console : consoles) {
- for (IOConsoleOutputStream stream : console.out.values()) {
- if (!stream.isClosed()) return;
- }
- }
if (launch_node == null) return;
if (launch_node.isDisposed()) return;
if (!launch_node.validateNode(this)) return;
@@ -594,18 +576,12 @@ public class TCFModel implements IElementContentProvider, IElementLabelProvider,
}
void dispose() {
- if (!consoles.isEmpty()) {
- int i = 0;
- final IOConsole[] buf = new IOConsole[consoles.size()];
- for (Console console : consoles) {
- console.close();
- buf[i++] = console.console;
- }
- consoles.clear();
+ if (console != null) {
display.asyncExec(new Runnable() {
public void run() {
+ console.close();
IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager();
- manager.removeConsoles(buf);
+ manager.removeConsoles(new IOConsole[]{ console.console });
}
});
}
diff --git a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/model/TCFLaunch.java b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/model/TCFLaunch.java
index 1f12f0565..cbc9141fe 100644
--- a/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/model/TCFLaunch.java
+++ b/plugins/org.eclipse.tm.tcf.debug/src/org/eclipse/tm/internal/tcf/debug/model/TCFLaunch.java
@@ -79,6 +79,7 @@ public class TCFLaunch extends Launch {
private ProcessContext process;
private IToken process_start_command;
private String process_input_stream_id;
+ private int process_exit_code;
private int context_action_cnt;
private final HashMap<String,LinkedList<Runnable>> context_action_queue =
@@ -101,6 +102,13 @@ public class TCFLaunch extends Launch {
}
};
+ private final IProcesses.ProcessesListener prs_listener = new IProcesses.ProcessesListener() {
+
+ public void exited(String process_id, int exit_code) {
+ if (process_id.equals(process.getID())) process_exit_code = exit_code;
+ }
+ };
+
public TCFLaunch(ILaunchConfiguration launchConfiguration, String mode) {
super(launchConfiguration, mode, null);
for (Listener l : listeners) l.onCreated(TCFLaunch.this);
@@ -268,6 +276,7 @@ public class TCFLaunch extends Launch {
return;
}
TCFLaunch.this.process = process;
+ ps.addListener(prs_listener);
connectProcessStreams();
done.run();
}
@@ -580,6 +589,10 @@ public class TCFLaunch extends Launch {
return last_context_exited;
}
+ public int getExitCode() {
+ return process_exit_code;
+ }
+
public void launchTCF(String mode, String id) {
assert Protocol.isDispatchThread();
this.mode = mode;

Back to the top