From 842275fcdc71442bfe46a6fc8fc19705f0ed316a Mon Sep 17 00:00:00 2001
From: Torsten Grote <t@grobox.de>
Date: Mon, 31 Jan 2022 09:33:59 -0300
Subject: [PATCH] Do not start lifecycle when wiping from CLI

---
 .../java/org/briarproject/mailbox/cli/Main.kt | 25 ++++++++-----------
 .../mailbox/core/setup/WipeManager.kt         |  3 ++-
 2 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt b/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt
index 6dd40c12..1c0c0514 100644
--- a/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt
+++ b/mailbox-cli/src/main/java/org/briarproject/mailbox/cli/Main.kt
@@ -107,6 +107,15 @@ class Main : CliktCommand(
         val javaCliComponent = DaggerJavaCliComponent.builder().build()
         javaCliComponent.inject(this)
 
+        if (wipe) {
+            wipeManager.wipeFilesOnly()
+            println("Mailbox wiped successfully \\o/")
+            exitProcess(0)
+        }
+        startLifecycle()
+    }
+
+    private fun startLifecycle() {
         Runtime.getRuntime().addShutdownHook(
             Thread {
                 lifecycleManager.stopServices()
@@ -114,24 +123,10 @@ class Main : CliktCommand(
             }
         )
 
-        // This is a cli app, we'll always want this fully up when started, so start lifecycle
         lifecycleManager.startServices()
         lifecycleManager.waitForStartup()
 
-        if (wipe) {
-            // FIXME this can cause a deadlock
-            //  see: https://code.briarproject.org/briar/briar-mailbox/-/issues/76
-            val wipeResult = lifecycleManager.wipeMailbox()
-            lifecycleManager.stopServices()
-            lifecycleManager.waitForShutdown()
-            if (wipeResult) {
-                println("Mailbox wiped successfully \\o/")
-                exitProcess(0)
-            } else {
-                println("ERROR: Mailbox was not wiped cleanly")
-                exitProcess(1)
-            }
-        } else if (setupToken != null) {
+        if (setupToken != null) {
             try {
                 setupManager.setToken(setupToken, null)
             } catch (e: InvalidIdException) {
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/WipeManager.kt b/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/WipeManager.kt
index 430c47bd..7cefaaeb 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/WipeManager.kt
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/setup/WipeManager.kt
@@ -49,7 +49,8 @@ class WipeManager @Inject constructor(
     /**
      * Deletes all files, includes the database files.
      *
-     * This must only be called by the [LifecycleManager].
+     * This must only be called by the [LifecycleManager]
+     * or by the CLI when no lifecycle was started.
      */
     fun wipeFilesOnly() {
         fileManager.deleteAllFiles()
-- 
GitLab