aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/org/connectbot/transport
diff options
context:
space:
mode:
authorKenny Root <kenny@the-b.org>2015-09-14 09:38:47 -0700
committerKenny Root <kenny@the-b.org>2015-09-14 09:38:47 -0700
commit5159d77d26981b5718c8acb32718991823fdf9d2 (patch)
tree8a52b9ff88bb26f7e73dd418a4a928418ab58128 /app/src/main/java/org/connectbot/transport
parent087bf8ee32423a8582c6a303f47a28611b83d8c7 (diff)
downloadconnectbot-5159d77d26981b5718c8acb32718991823fdf9d2.tar.gz
connectbot-5159d77d26981b5718c8acb32718991823fdf9d2.tar.bz2
connectbot-5159d77d26981b5718c8acb32718991823fdf9d2.zip
Kill shell process after exiting local transport
Fixes #200
Diffstat (limited to 'app/src/main/java/org/connectbot/transport')
-rw-r--r--app/src/main/java/org/connectbot/transport/Local.java37
1 files changed, 22 insertions, 15 deletions
diff --git a/app/src/main/java/org/connectbot/transport/Local.java b/app/src/main/java/org/connectbot/transport/Local.java
index c4675c0..31130f4 100644
--- a/app/src/main/java/org/connectbot/transport/Local.java
+++ b/app/src/main/java/org/connectbot/transport/Local.java
@@ -25,16 +25,15 @@ import java.util.Map;
import org.connectbot.R;
import org.connectbot.bean.HostBean;
-import org.connectbot.service.TerminalBridge;
-import org.connectbot.service.TerminalManager;
import org.connectbot.util.HostDatabase;
+import com.google.ase.Exec;
+
import android.content.Context;
import android.net.Uri;
+import android.support.annotation.VisibleForTesting;
import android.util.Log;
-import com.google.ase.Exec;
-
/**
* @author Kenny Root
*
@@ -44,25 +43,21 @@ public class Local extends AbsTransport {
private static final String PROTOCOL = "local";
private static final String DEFAULT_URI = "local:#Local";
+ private final Killer killer;
private FileDescriptor shellFd;
+ private int shellPid;
private FileInputStream is;
private FileOutputStream os;
- /**
- *
- */
public Local() {
+ killer = new AndroidKiller();
}
- /**
- * @param host
- * @param bridge
- * @param manager
- */
- public Local(HostBean host, TerminalBridge bridge, TerminalManager manager) {
- super(host, bridge, manager);
+ @VisibleForTesting
+ public Local(Killer killer) {
+ this.killer = killer;
}
public static String getProtocolName() {
@@ -80,6 +75,7 @@ public class Local extends AbsTransport {
is.close();
is = null;
}
+ killer.killProcess(shellPid);
} catch (IOException e) {
Log.e(TAG, "Couldn't close shell", e);
}
@@ -97,7 +93,7 @@ public class Local extends AbsTransport {
return;
}
- final int shellPid = pids[0];
+ shellPid = pids[0];
Runnable exitWatcher = new Runnable() {
public void run() {
Exec.waitFor(shellPid);
@@ -221,4 +217,15 @@ public class Local extends AbsTransport {
public boolean usesNetwork() {
return false;
}
+
+ private interface Killer {
+ void killProcess(int pid);
+ }
+
+ private static class AndroidKiller implements Killer {
+ @Override
+ public void killProcess(int pid) {
+ android.os.Process.killProcess(pid);
+ }
+ }
}