From 29f0b9d3c0777de7c17f543d7caf1a96674e53ae Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 28 Apr 2025 18:34:11 +0100 Subject: [PATCH 1/2] Mark DB as clean after compacting. This ensures we compact the DB at the next startup if we didn't finish compacting it at shutdown. --- .../java/org/briarproject/bramble/db/H2Database.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java b/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java index ce9a6912c..08cec8ecb 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/db/H2Database.java @@ -89,11 +89,17 @@ class H2Database extends JdbcDatabase { try { c = createConnection(); closeAllConnections(); - setDirty(c, false); + LOG.info("Compacting DB"); s = c.createStatement(); s.execute("SHUTDOWN COMPACT"); + LOG.info("Finished compacting DB"); s.close(); c.close(); + // Reopen the DB to mark it as clean after compacting + c = createConnection(); + setDirty(c, false); + LOG.info("Marked DB as clean"); + c.close(); } catch (SQLException e) { tryToClose(s, LOG, WARNING); tryToClose(c, LOG, WARNING); @@ -126,6 +132,7 @@ class H2Database extends JdbcDatabase { closeAllConnections(); s = c.createStatement(); s.execute("SHUTDOWN COMPACT"); + LOG.info("Finished compacting DB"); s.close(); c.close(); } catch (SQLException e) { From 8e1371acf0d4101abb0b1983520200aeac0df9f4 Mon Sep 17 00:00:00 2001 From: akwizgran Date: Mon, 28 Apr 2025 18:34:54 +0100 Subject: [PATCH 2/2] Keep foreground service until lifecycle shutdown completes. This ensures our background threads keep running. --- .../briar/android/BriarService.java | 39 +++++++++++-------- .../controller/BriarControllerImpl.java | 2 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java index 6fe6df44c..3639a02f1 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/BriarService.java @@ -217,19 +217,14 @@ public class BriarService extends Service { @Override public void onDestroy() { - // Hold a wake lock during shutdown - wakeLockManager.runWakefully(() -> { - super.onDestroy(); - LOG.info("Destroyed"); - stopForeground(true); - if (receiver != null) { - getApplicationContext().unregisterReceiver(receiver); - } - // Stop the services in a background thread - wakeLockManager.executeWakefully(() -> { - if (started) lifecycleManager.stopServices(); - }, "LifecycleShutdown"); - }, "LifecycleShutdown"); + super.onDestroy(); + LOG.info("Destroyed"); + // Stop the lifecycle, if not already stopped + shutdown(false); + stopForeground(true); + if (receiver != null) { + getApplicationContext().unregisterReceiver(receiver); + } } @Override @@ -299,8 +294,8 @@ public class BriarService extends Service { private void shutdownFromBackground() { // Hold a wake lock during shutdown wakeLockManager.runWakefully(() -> { - // Stop the service - stopSelf(); + // Begin lifecycle shutdown + shutdown(true); // Hide the UI hideUi(); // Wait for shutdown to complete, then exit @@ -335,8 +330,18 @@ public class BriarService extends Service { /** * Starts the shutdown process. */ - public void shutdown() { - stopSelf(); // This will call onDestroy() + public void shutdown(boolean stopAndroidService) { + // Hold a wake lock during shutdown + wakeLockManager.runWakefully(() -> { + // Stop the lifecycle services in a background thread, + // then stop this Android service if needed + wakeLockManager.executeWakefully(() -> { + if (started) lifecycleManager.stopServices(); + if (stopAndroidService) { + androidExecutor.runOnUiThread(() -> stopSelf()); + } + }, "LifecycleShutdown"); + }, "LifecycleShutdown"); } public class BriarBinder extends Binder { diff --git a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java index 34f4edcee..0993bbe75 100644 --- a/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java +++ b/briar-android/src/main/java/org/briarproject/briar/android/controller/BriarControllerImpl.java @@ -147,7 +147,7 @@ public class BriarControllerImpl implements BriarController { service.waitForStartup(); // Shut down the service and wait for it to shut down LOG.info("Shutting down service"); - service.shutdown(); + service.shutdown(true); service.waitForShutdown(); } catch (InterruptedException e) { LOG.warning("Interrupted while waiting for service");