From 99a174f8c15df1722a1e9d0065b50399c0bdc8ca Mon Sep 17 00:00:00 2001 From: M66B Date: Wed, 12 Sep 2018 08:16:38 +0000 Subject: [PATCH] Fixed occasional hangs on stop, small improvements --- .../eu/faircode/email/ServiceSynchronize.java | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index a5130402..38b121d7 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -1549,6 +1549,7 @@ public class ServiceSynchronize extends LifecycleService { private void start() { EntityLog.log(ServiceSynchronize.this, "Main start"); + state = new ServiceState(); main = new Thread(new Runnable() { @@ -1556,9 +1557,9 @@ public class ServiceSynchronize extends LifecycleService { @Override public void run() { - DB db = DB.getInstance(ServiceSynchronize.this); - try { + DB db = DB.getInstance(ServiceSynchronize.this); + outbox = db.folder().getOutbox(); if (outbox == null) { EntityLog.log(ServiceSynchronize.this, "No outbox, halt"); @@ -1604,11 +1605,12 @@ public class ServiceSynchronize extends LifecycleService { threads.add(t); } - EntityLog.log(ServiceSynchronize.this, "Main started " + main); + EntityLog.log(ServiceSynchronize.this, "Main started"); synchronized (state) { try { - state.wait(); + if (state.running) + state.wait(); } catch (InterruptedException ex) { Log.w(Helper.TAG, "main wait " + ex.toString()); } @@ -1638,7 +1640,8 @@ public class ServiceSynchronize extends LifecycleService { } private void stop() { - EntityLog.log(ServiceSynchronize.this, "Main stop " + main); + EntityLog.log(ServiceSynchronize.this, "Main stop"); + synchronized (state) { state.running = false; state.notifyAll(); @@ -1648,10 +1651,10 @@ public class ServiceSynchronize extends LifecycleService { main.interrupt(); join(main); + EntityLog.log(ServiceSynchronize.this, "Main stopped"); + main = null; state = null; - - EntityLog.log(ServiceSynchronize.this, "Main stopped " + main); } private void restart() {