[Esbox-commits] r1917 - trunk/org.maemo.esbox.maemosdk.core/src/org/maemo/esbox/internal/api/maemosdk/core/tools
ilpyykko at garage.maemo.org
ilpyykko at garage.maemo.org
Mon Aug 3 13:41:12 EEST 2009
Author: ilpyykko
Date: 2009-08-03 13:41:11 +0300 (Mon, 03 Aug 2009)
New Revision: 1917
Modified:
trunk/org.maemo.esbox.maemosdk.core/src/org/maemo/esbox/internal/api/maemosdk/core/tools/XLauncher.java
Log:
Fixed stopping Xephyr instance and created better running instance check.
Modified: trunk/org.maemo.esbox.maemosdk.core/src/org/maemo/esbox/internal/api/maemosdk/core/tools/XLauncher.java
===================================================================
--- trunk/org.maemo.esbox.maemosdk.core/src/org/maemo/esbox/internal/api/maemosdk/core/tools/XLauncher.java 2009-07-31 20:39:18 UTC (rev 1916)
+++ trunk/org.maemo.esbox.maemosdk.core/src/org/maemo/esbox/internal/api/maemosdk/core/tools/XLauncher.java 2009-08-03 10:41:11 UTC (rev 1917)
@@ -12,7 +12,17 @@
package org.maemo.esbox.internal.api.maemosdk.core.tools;
-import org.eclipse.core.runtime.*;
+import java.io.IOException;
+import java.net.Socket;
+import java.text.MessageFormat;
+import java.util.List;
+import java.util.regex.Pattern;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.core.runtime.jobs.Job;
import org.maemo.esbox.internal.maemosdk.core.Activator;
import org.maemo.esbox.maemosdk.core.MaemoPreferenceConstants;
@@ -26,16 +36,15 @@
import org.maemo.mica.common.core.machine.ProcessFilterCmdLineRegexp;
import org.maemo.mica.common.core.preferences.CorePreferenceManager;
import org.maemo.mica.common.core.preferences.IPreferenceProvider;
-import org.maemo.mica.common.core.process.*;
+import org.maemo.mica.common.core.process.CommandLineArguments;
+import org.maemo.mica.common.core.process.IProcessLauncher;
+import org.maemo.mica.common.core.process.IProcessLauncherFactory;
+import org.maemo.mica.common.core.process.IProcessMonitor;
+import org.maemo.mica.common.core.process.ProcessLauncherParameters;
+import org.maemo.mica.common.core.process.ProcessLauncherUtils;
import org.maemo.mica.common.core.sdk.ISDKTarget;
import org.maemo.mica.maemosdk.core.IMaemoSDKPlatform;
-import java.io.IOException;
-import java.net.Socket;
-import java.text.MessageFormat;
-import java.util.List;
-import java.util.regex.Pattern;
-
/**
* This class maintains knowledge about whether the X server is running in the
* host, and controls access to starting, stopping, and querying status.
@@ -228,7 +237,12 @@
List<String> newCommandLine = getDisplayXServerCommand(prefProvider);
if (previousCommandLine != null) {
- return previousCommandLine.equals(newCommandLine);
+ // Check if processes match, but ignore full executable path and only check process names.
+ return previousCommandLine.size() >= 1 && previousCommandLine.size() == newCommandLine.size() &&
+ newCommandLine.subList(1, newCommandLine.size()).equals(
+ previousCommandLine.subList(1, previousCommandLine.size()))
+ && getSimpleProcessName(previousCommandLine.get(0)).equals(
+ getSimpleProcessName(newCommandLine.get(0)));
}
// we didn't launch it....
@@ -425,9 +439,31 @@
previousDisplay = null;
// find server to kill
- if (cmdLine.size() > 0) {
- killProcess(cmdLine.get(0), "Killing X Server");
+
+ if (cmdLine.isEmpty()) {
+ return;
}
+
+ String executable = getSimpleProcessName(cmdLine.get(0));
+ String diplay = getDisplayValue(prefProvider);
+
+ IProcess[] processes = MachineRegistry.getInstance().getLocalMachine().
+ getProcessLister().getProcesses(new ProcessFilterCmdLineRegexp(
+ ".*" + Pattern.quote(executable) + ".*\\s+" +
+ Pattern.quote(diplay) + "(?:\\s.*|$)",
+ Pattern.CASE_INSENSITIVE )).toArray(new IProcess[]{});
+
+ if (processes.length <= 0) {
+ processes = getMatchingXProcesses(executable);
+ }
+
+ for (IProcess process : processes) {
+ try {
+ process.terminate();
+ } catch (IOException e) {
+ throw new MicaException("Error killing " + executable, e);
+ }
+ }
}
/**
@@ -506,36 +542,29 @@
}
/**
- * Kill all instances of a given process
- *
- * @param processLabel
- * the user-visible name for the process
+ * Get pure process name from process name string.
+ * Example '/bin/sh' returns 'sh' and 'sh' returns 'sh'.
+ *
+ * @param processName the process name
+ * @return the pure process name
*/
- private void killProcess(String processName,
- String processLabel) throws MicaException {
- IProcess[] processes = getMatchingXProcesses(processName);
- for (IProcess process : processes) {
- try {
- process.terminate();
- } catch (IOException e) {
- throw new MicaException("Error killing " + processName, e);
- }
+ private static String getSimpleProcessName(String processName) {
+ // resolve pure process name
+ int slashIndex = processName.lastIndexOf("/");
+ if(slashIndex != -1){
+ processName = processName.substring(slashIndex+1);
}
+ return processName;
}
-
+
/**
* @param machine
* @return
*/
private IProcess[] getMatchingXProcesses(String processName) {
- // resolve pure process name
- int slashIndex = processName.lastIndexOf("/");
- if(slashIndex != -1){
- processName = processName.substring(slashIndex+1);
- }
List<IProcess> processes = MachineRegistry.getInstance().getLocalMachine().
getProcessLister().getProcesses(
- new ProcessFilterCmdLineRegexp(".*" + processName + ".*",Pattern.CASE_INSENSITIVE));
+ new ProcessFilterCmdLineRegexp(".*" + Pattern.quote(getSimpleProcessName(processName)) + ".*",Pattern.CASE_INSENSITIVE));
return (IProcess[]) processes.toArray(new IProcess[processes.size()]);
}
More information about the Esbox-commits
mailing list