aboutsummaryrefslogtreecommitdiffstats
path: root/tests/test-extensions/net/sourceforge
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test-extensions/net/sourceforge')
-rw-r--r--tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java36
-rw-r--r--tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java4
-rw-r--r--tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java4
3 files changed, 32 insertions, 12 deletions
diff --git a/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java b/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java
index c910311..4bb5187 100644
--- a/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java
+++ b/tests/test-extensions/net/sourceforge/jnlp/ProcessAssasin.java
@@ -34,9 +34,12 @@ this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version.
*/
-
package net.sourceforge.jnlp;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* class which timeout any ThreadedProcess. This killing of 'thread with process' replaced not working process.destroy().
*/
@@ -112,14 +115,10 @@ class ProcessAssasin extends Thread {
ServerAccess.logErrorReprint("Timed out " + p.toString() + " " + "null .. killing " + p.getCommandLine() + ": ");
}
wasTerminated = true;
- p.interrupt();
- while (!ServerAccess.terminated.contains(p)) {
- Thread.sleep(100);
- }
if (p.getP() != null) {
try {
if (!skipInstedOfDesroy) {
- p.getP().destroy();
+ destroyProcess(p);
}
} catch (Throwable ex) {
if (p.deadlyException == null) {
@@ -128,6 +127,10 @@ class ProcessAssasin extends Thread {
ex.printStackTrace();
}
}
+ p.interrupt();
+// while (!ServerAccess.terminated.contains(p)) {
+// Thread.sleep(100);
+// }
if (p.getP() != null) {
ServerAccess.logErrorReprint("Timed out " + p.toString() + " " + p.getP().toString() + " .. killed " + p.getCommandLine());
} else {
@@ -156,4 +159,25 @@ class ProcessAssasin extends Thread {
ServerAccess.logNoReprint("assassin for non existing job termination " + wasTerminated);
}
}
+
+ public static void destroyProcess(ThreadedProcess pp) {
+ Process p = pp.getP();
+ try {
+ Field f = p.getClass().getDeclaredField("pid");
+ f.setAccessible(true);
+ String pid = (f.get(p)).toString();
+ List<String> ll=new ArrayList<String>(4);
+ ll.add("kill");
+ ll.add("-s");
+ ll.add("SIGTERM");
+ ll.add(pid);
+ ServerAccess.executeProcess(ll);//sync, but acctually release
+ //before affected application close
+ Thread.sleep(1000);
+ } catch (Exception ex) {
+ ServerAccess.logException(ex);
+ } finally {
+ p.destroy();
+ }
+ }
}
diff --git a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java
index bc9242f..7981054 100644
--- a/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java
+++ b/tests/test-extensions/net/sourceforge/jnlp/ServerAccess.java
@@ -111,10 +111,6 @@ public class ServerAccess {
*/
public static long PROCESS_TIMEOUT = 20 * 1000;//ms
/**
- * all terminated processes are stored here. As wee need to 'wait' to termination to be finished.
- */
- static Set<Thread> terminated = new HashSet<Thread>();
- /**
* this flag is indicating whether output of executeProcess should be logged. By default true.
*/
public static boolean PROCESS_LOG = true;
diff --git a/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java b/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java
index c37d842..32f515a 100644
--- a/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java
+++ b/tests/test-extensions/net/sourceforge/jnlp/ThreadedProcess.java
@@ -125,10 +125,10 @@ class ThreadedProcess extends Thread {
//add to the set of terminated threaded processes
deadlyException = ex;
ServerAccess.logException(deadlyException, false);
- ServerAccess.terminated.add(this);
+ //ServerAccess.terminated.add(this);
} else {
//happens when non-existing process is launched, is causing p null!
- ServerAccess.terminated.add(this);
+ //ServerAccess.terminated.add(this);
deadlyException = ex;
ServerAccess.logException(deadlyException, false);
throw new RuntimeException(ex);