From 5159d77d26981b5718c8acb32718991823fdf9d2 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Mon, 14 Sep 2015 09:38:47 -0700 Subject: Kill shell process after exiting local transport Fixes #200 --- .../main/java/org/connectbot/transport/Local.java | 37 +++++++++++++--------- 1 file 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); + } + } } -- cgit v1.2.3