clairehurst pushed to branch tor-browser-147.0a1-16.0-2 at The Tor Project / Applications / Tor Browser Commits: 5eb4ba41 by Dan Ballard at 2026-02-05T13:09:54-07:00 fixup! TB 42247: Android helpers for the TorProvider Bug 43645: wiring in proper call to shutdown the tor process - - - - - c9a70495 by Dan Ballard at 2026-02-05T13:09:54-07:00 fixup! TB 41878: [android] Add standalone Tor Bootstrap Bug 43645: wire in call to shutdown tor process onDestroy - - - - - 4 changed files: - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt - mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt - mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java Changes: ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/HomeActivity.kt ===================================== @@ -184,6 +184,7 @@ import mozilla.components.browser.engine.gecko.GeckoEngine import org.mozilla.fenix.compose.core.Action import org.mozilla.fenix.compose.snackbar.SnackbarState import org.mozilla.fenix.compose.snackbar.Snackbar +import org.mozilla.fenix.tor.TorController import org.mozilla.fenix.tor.UrlQuickLoadViewModel import org.mozilla.geckoview.TorAndroidIntegration.BootstrapStateChangeListener import org.mozilla.geckoview.TorConnectStage @@ -1586,6 +1587,7 @@ open class HomeActivity : LocaleAwareAppCompatActivity(), NavHostActivity { // If we don't manually stop the service, the persistent "close tabs" notification sometimes does not clear applicationContext.stopService(Intent(applicationContext, PrivateNotificationService::class.java)) finishAndRemoveTask() + components.torController.shutdown() exitProcess(0) } } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorController.kt ===================================== @@ -38,4 +38,5 @@ interface TorController { fun initiateTorBootstrap(lifecycleScope: LifecycleCoroutineScope? = null, withDebugLogging: Boolean = false) fun stopTor() + fun shutdown() } ===================================== mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tor/TorControllerGV.kt ===================================== @@ -176,6 +176,10 @@ class TorControllerGV( getTorIntegration().cancelBootstrap() } + override fun shutdown() { + getTorIntegration().shutdown() + } + // TorEventsBootstrapStateChangeListener override fun onBootstrapStageChange(stage: TorConnectStage) { Log.d(TAG, "onBootstrapStageChange(stage = $stage)") ===================================== mobile/android/geckoview/src/main/java/org/mozilla/geckoview/TorAndroidIntegration.java ===================================== @@ -105,8 +105,8 @@ public class TorAndroidIntegration implements BundleEventListener { registerListener(); } - /* package */ synchronized void shutdown() { - // FIXME: It seems this never gets called + // To be called when the app is shutting down only + public synchronized void shutdown() { if (mTorProcess != null) { mTorProcess.shutdown(); mTorProcess = null; @@ -332,7 +332,7 @@ public class TorAndroidIntegration implements BundleEventListener { Log.i(TAG, "[tor-" + mHandle + "] " + line); } } catch (IOException e) { - Log.e(TAG, "Failed to read stdout of the tor process " + mHandle, e); + Log.e(TAG, "Failed to read stdout of the tor process " + mHandle + " (expected when program is exiting)", e); } Log.d(TAG, "Exiting the stdout loop for process " + mHandle); final GeckoBundle data = new GeckoBundle(2); View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/cd8bcb6... -- View it on GitLab: https://gitlab.torproject.org/tpo/applications/tor-browser/-/compare/cd8bcb6... You're receiving this email because of your account on gitlab.torproject.org.