From 00f52226d8fa1243534fc07bb179f83471b8d8b4 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sun, 3 Mar 2024 08:02:31 +0100 Subject: [PATCH] execute all account state managments on ping thread --- .../conversations/services/XmppConnectionService.java | 10 ++++++++-- .../eu/siacs/conversations/utils/WakeLockHelper.java | 8 ++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index f120c4c54..887ffe937 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -83,6 +83,7 @@ import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -879,7 +880,12 @@ public class XmppConnectionService extends Service { } return START_NOT_STICKY; } - manageAccountConnectionStates(action, intent == null ? null : intent.getExtras()); + final var extras = intent == null ? null : intent.getExtras(); + try { + internalPingExecutor.execute(() -> manageAccountConnectionStates(action, extras)); + } catch (final RejectedExecutionException e) { + Log.e(Config.LOGTAG, "can not schedule connection states manager"); + } if (SystemClock.elapsedRealtime() - mLastExpiryRun.get() >= Config.EXPIRY_INTERVAL) { expireOldMessages(); } @@ -959,7 +965,7 @@ public class XmppConnectionService extends Service { } } - private boolean processAccountState(Account account, boolean interactive, boolean isUiAction, boolean isAccountPushed, HashSet pingCandidates) { + private boolean processAccountState(final Account account, final boolean interactive, final boolean isUiAction, final boolean isAccountPushed, final HashSet pingCandidates) { if (!account.getStatus().isAttemptReconnect()) { return false; } diff --git a/src/main/java/eu/siacs/conversations/utils/WakeLockHelper.java b/src/main/java/eu/siacs/conversations/utils/WakeLockHelper.java index ce1631b03..9fb38ef86 100644 --- a/src/main/java/eu/siacs/conversations/utils/WakeLockHelper.java +++ b/src/main/java/eu/siacs/conversations/utils/WakeLockHelper.java @@ -36,15 +36,15 @@ import eu.siacs.conversations.Config; public class WakeLockHelper { - public static void acquire(PowerManager.WakeLock wakeLock) { + public static void acquire(final PowerManager.WakeLock wakeLock) { try { wakeLock.acquire(2000); - } catch (RuntimeException e) { + } catch (final RuntimeException e) { Log.d(Config.LOGTAG, "unable to acquire wake lock", e); } } - public static void release(PowerManager.WakeLock wakeLock) { + public static void release(final PowerManager.WakeLock wakeLock) { if (wakeLock == null) { return; } @@ -52,7 +52,7 @@ public class WakeLockHelper { if (wakeLock.isHeld()) { wakeLock.release(); } - } catch (RuntimeException e) { + } catch (final RuntimeException e) { Log.d(Config.LOGTAG, "unable to release wake lock", e); } }