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 6dd40c126530145068fe8e719c9e120e708a6d03..1c0c0514fdc0510a6a566e491bbd8543e69f47e2 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 430c47bd240bd380c3896b72a76e5a10106c1c25..7cefaaebb256539775eea64cf40606656dcf1b72 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()