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) { 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");