[tor-commits] [orbot/master] rework killing all daemons to continue trying after a failure

n8fr8 at torproject.org n8fr8 at torproject.org
Thu Jun 25 14:59:58 UTC 2015


commit 2bc85a4a3a8e260ab62b7378a933ca37ff6fffac
Author: Hans-Christoph Steiner <hans at eds.org>
Date:   Mon Jun 8 23:38:56 2015 -0400

    rework killing all daemons to continue trying after a failure
    
    Before, it would quit the process on the first exception while killing.
    This makes it keep on trying each daemon.
---
 src/org/torproject/android/service/TorService.java |   50 +++++++++++++-------
 1 file changed, 34 insertions(+), 16 deletions(-)

diff --git a/src/org/torproject/android/service/TorService.java b/src/org/torproject/android/service/TorService.java
index 599d8c8..26a7df8 100644
--- a/src/org/torproject/android/service/TorService.java
+++ b/src/org/torproject/android/service/TorService.java
@@ -399,7 +399,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         {
             Log.d(TAG,"Tor is stopping NOW");
 
-            shutdownTorProcess ();
+            killAllDaemons ();
 
             //stop the foreground priority and make sure to remove the persistant notification
             stopForeground(true);
@@ -505,31 +505,49 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
     }
 
 
-    private void shutdownTorProcess () throws Exception
-    {
-
-        if (conn != null)
-        {
-
+    private void killAllDaemons() throws CannotKillException {
+        if (conn != null) {
             logNotice("Using control port to shutdown Tor");
 
-
             try {
                 logNotice("sending HALT signal to Tor process");
                 conn.shutdownTor("HALT");
 
-            } catch (Exception e) {
-                Log.d(TAG,"error shutting down Tor via connection",e);
+            } catch (IOException e) {
+                Log.d(TAG, "error shutting down Tor via connection", e);
             }
 
             conn = null;
         }
 
-        killProcess(fileTor);
-
-        killProcess(filePolipo);
-        killProcess(fileObfsclient);
-        killProcess(fileMeekclient);
+        // try these separately in case one fails, then it can try the next
+        File cannotKillFile = null;
+        try {
+            killProcess(fileObfsclient);
+        } catch (IOException e) {
+            e.printStackTrace();
+            cannotKillFile = fileObfsclient;
+        }
+        try {
+            killProcess(fileMeekclient);
+        } catch (IOException e) {
+            e.printStackTrace();
+            cannotKillFile = fileMeekclient;
+        }
+        try {
+            killProcess(filePolipo);
+        } catch (IOException e) {
+            e.printStackTrace();
+            cannotKillFile = filePolipo;
+        }
+        try {
+            killProcess(fileTor);
+        } catch (IOException e) {
+            e.printStackTrace();
+            cannotKillFile = fileTor;
+        }
+        if (cannotKillFile != null)
+            throw new CannotKillException(cannotKillFile);
     }
 
     public class CannotKillException extends IllegalStateException {
@@ -540,7 +558,7 @@ public class TorService extends Service implements TorServiceConstants, OrbotCon
         }
     }
 
-    private void killProcess(File fileProcBin) throws IOException {
+    private void killProcess(File fileProcBin) throws IOException, CannotKillException {
         int procId = -1;
         int killAttempts = 0;
 





More information about the tor-commits mailing list