From ebf162070e018b45fd40e98cfd15a8f1393defa1 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 30 Oct 2020 12:16:49 +0100 Subject: [PATCH] Store unrecoverable --- app/src/main/java/eu/faircode/email/Core.java | 8 ++++++++ .../main/java/eu/faircode/email/ServiceSynchronize.java | 9 +++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index f1af4c07e2..91ae00cc89 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -4168,6 +4168,7 @@ class Core { private Semaphore semaphore = new Semaphore(0); private boolean running = true; private boolean recoverable = true; + private Throwable unrecoverable = null; private Long lastActivity = null; private boolean process = false; @@ -4244,6 +4245,9 @@ class Core { if (ex instanceof OperationCanceledException) recoverable = false; + if (!recoverable) + unrecoverable = ex; + if (!backingoff) { thread.interrupt(); yield(); @@ -4297,6 +4301,10 @@ class Core { return recoverable; } + Throwable getUnrecoverable() { + return unrecoverable; + } + void join(Thread thread) { boolean joined = false; boolean interrupted = false; diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 7503e20d9b..68b4e3b3a9 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1469,8 +1469,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences " Tune interval=" + account.poll_interval + " idle=" + idleTime + "/" + tune); try { - if (!state.isRecoverable()) - throw new StoreClosedException(iservice.getStore(), "Unrecoverable"); + if (!state.isRecoverable()) { + Throwable ex = state.getUnrecoverable(); + if (ex instanceof Exception) + throw new StoreClosedException(iservice.getStore(), "Unrecoverable", (Exception) ex); + else + throw new StoreClosedException(iservice.getStore(), "Unrecoverable"); + } // Sends store NOOP EntityLog.log(ServiceSynchronize.this, account.name + " checking store");