summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas <tom79@noreply.codeberg.org>2023-09-05 04:53:33 +0000
committerThomas <tom79@noreply.codeberg.org>2023-09-05 04:53:33 +0000
commit57860793ff64fc78d9c54fd83d2c7f4c5d3b20e5 (patch)
treeb768db0f5903601766d9063a1ba719151f3ab5ea
parent5f3ca6239326dc0326d5dba2384bff48681466d8 (diff)
parentceebe74ec12fcfd9c97b7fcf89e8538e184e3ee4 (diff)
Merge pull request 'Set one lock per account for push notif' (#956) from s1m/Fedilab:push-multi-lock into develop
Reviewed-on: https://codeberg.org/tom79/Fedilab/pulls/956
-rw-r--r--app/src/main/java/app/fedilab/android/mastodon/helper/NotificationsHelper.java14
1 files changed, 13 insertions, 1 deletions
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 8d9e09bc0..a4572df6d 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
@@ -64,7 +64,18 @@ public class NotificationsHelper {
public static HashMap<String, List<String>> pushed_notifications = new HashMap<>();
- public static ReentrantLock lock = new ReentrantLock();
+ private static final HashMap<String, ReentrantLock> 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 {
@@ -93,6 +104,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()) {