From d5e1cf1ae1ce2bb192987c627c3c01873db58a07 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 21 Sep 2020 13:34:44 +0200 Subject: [PATCH] Skip batches on session change --- app/src/main/java/eu/faircode/email/Core.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 1d1a4cf457..0f019e9497 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -162,7 +162,7 @@ class Core { Log.i(folder.name + " executing operations=" + ops.size()); while (retry < LOCAL_RETRY_MAX && ops.size() > 0 && state.isRunning() && - state.batchCanRun(folder.id, priority, sequence)) { + state.batchCanRun(session, folder.id, priority, sequence)) { TupleOperationEx op = ops.get(0); try { @@ -500,7 +500,9 @@ class Core { ops.remove(op); } else { retry++; - if (retry < LOCAL_RETRY_MAX) + if (retry < LOCAL_RETRY_MAX && + state.isRunning() && + state.batchCanRun(session, folder.id, priority, sequence)) try { Thread.sleep(LOCAL_RETRY_DELAY); } catch (InterruptedException ex1) { @@ -4251,7 +4253,10 @@ class Core { } } - boolean batchCanRun(long folder, int priority, long current) { + boolean batchCanRun(int session, long folder, int priority, long current) { + if (!this.active || session != this.session) + return false; + synchronized (this) { FolderPriority key = new FolderPriority(folder, priority); boolean can = batch.get(key).equals(current);