From b7b98fbd4130597175d3da49d5be06142dbdc4cd Mon Sep 17 00:00:00 2001
From: Vitaly Takmazov
Date: Sun, 12 Nov 2023 00:21:04 +0300
Subject: Key-based locking in signature verification
---
src/main/java/com/juick/util/ReentrantLockMap.java | 47 ++++++++++++++++++++++
1 file changed, 47 insertions(+)
create mode 100644 src/main/java/com/juick/util/ReentrantLockMap.java
(limited to 'src/main/java/com/juick/util')
diff --git a/src/main/java/com/juick/util/ReentrantLockMap.java b/src/main/java/com/juick/util/ReentrantLockMap.java
new file mode 100644
index 00000000..36aee218
--- /dev/null
+++ b/src/main/java/com/juick/util/ReentrantLockMap.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2008-2023, Juick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+package com.juick.util;
+
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.ReentrantLock;
+
+public class ReentrantLockMap {
+
+ ConcurrentHashMap mapStringLock;
+
+ public ReentrantLockMap() {
+ mapStringLock = new ConcurrentHashMap<>();
+ }
+
+ public ReentrantLock getLock(String key) {
+ ReentrantLock initValue = createIntanceLock();
+ ReentrantLock lock = mapStringLock.putIfAbsent(key, initValue);
+ if (lock == null) {
+ lock = initValue;
+ }
+ return lock;
+ }
+
+ public void retainLock(String key) {
+ mapStringLock.remove(key);
+ }
+
+ protected ReentrantLock createIntanceLock() {
+ return new ReentrantLock();
+ }
+}
--
cgit v1.2.3