From ceebe74ec12fcfd9c97b7fcf89e8538e184e3ee4 Mon Sep 17 00:00:00 2001 From: sim Date: Mon, 4 Sep 2023 23:30:59 +0200 Subject: [PATCH] Set one lock per account for push notif --- .../mastodon/helper/NotificationsHelper.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java index e09dee4eb..5a00d0d7d 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java @@ -65,7 +65,18 @@ public class NotificationsHelper { public static HashMap> pushed_notifications = new HashMap<>(); - public static ReentrantLock lock = new ReentrantLock(); + private static final HashMap lockMap = new HashMap<>(); + + private static ReentrantLock getLock(String slug) { + synchronized (lockMap) { + if (lockMap.containsKey(slug)) { + return lockMap.get(slug); + } + ReentrantLock lock = new ReentrantLock(); + lockMap.put(slug, lock); + return lock; + } + } public static synchronized void task(Context context, String slug) throws DBException { @@ -94,6 +105,7 @@ public class NotificationsHelper { } new Thread(() -> { + ReentrantLock lock = getLock(slug); try { // fetch if we get the lock, or ignore, another thread is doing the job if (lock.tryLock()) {