X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Frepository%2FLock.java;h=70d00cb08e197ff25e43c7ae36f39e8894c02034;hb=8ca0695e455183b0fa23c3b5cd4b65ca08dd9e24;hp=bc5d77a32ef0db0655fc4591b2af26577a22327a;hpb=14accd2e91460d1651fe2c228fe1ba964cbfb6a6;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/repository/Lock.java b/policy-agent/src/main/java/org/oransc/policyagent/repository/Lock.java index bc5d77a3..70d00cb0 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/repository/Lock.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/repository/Lock.java @@ -42,6 +42,7 @@ public class Lock { private boolean isExclusive = false; private int lockCounter = 0; private final List lockRequestQueue = new LinkedList<>(); + private static AsynchCallbackExecutor callbackProcessor = new AsynchCallbackExecutor(); private static class AsynchCallbackExecutor implements Runnable { private List lockRequestQueue = new LinkedList<>(); @@ -72,6 +73,7 @@ public class Lock { return q; } + @SuppressWarnings("java:S2274") private synchronized void waitForNewEntries() { try { if (this.lockRequestQueue.isEmpty()) { @@ -79,13 +81,12 @@ public class Lock { } } catch (InterruptedException e) { logger.warn("waitForUnlock interrupted", e); + Thread.currentThread().interrupt(); } } } - private static AsynchCallbackExecutor callbackProcessor = new AsynchCallbackExecutor(); - - public static enum LockType { + public enum LockType { EXCLUSIVE, SHARED } @@ -116,7 +117,7 @@ public class Lock { synchronized (this) { if (lockCounter <= 0) { lockCounter = -1; // Might as well stop, to make it easier to find the problem - throw new RuntimeException("Number of unlocks must match the number of locks"); + throw new NullPointerException("Number of unlocks must match the number of locks"); } this.lockCounter--; if (lockCounter == 0) { @@ -148,10 +149,6 @@ public class Lock { } } } - - /* - * for (LockRequest request : granted) { request.callback.success(this); } - */ callbackProcessor.addAll(granted); } @@ -171,11 +168,13 @@ public class Lock { lockRequestQueue.add(new LockRequest(callback, lockType, this)); } - private void waitForUnlock() { + @SuppressWarnings("java:S2274") // Always invoke wait() and await() methods inside a loop + private synchronized void waitForUnlock() { try { this.wait(); } catch (InterruptedException e) { logger.warn("waitForUnlock interrupted", e); + Thread.currentThread().interrupt(); } }