private boolean isExclusive = false;
private int lockCounter = 0;
private final List<LockRequest> lockRequestQueue = new LinkedList<>();
+ private static AsynchCallbackExecutor callbackProcessor = new AsynchCallbackExecutor();
private static class AsynchCallbackExecutor implements Runnable {
private List<LockRequest> lockRequestQueue = new LinkedList<>();
return q;
}
+ @SuppressWarnings("java:S2274")
private synchronized void waitForNewEntries() {
try {
if (this.lockRequestQueue.isEmpty()) {
}
} 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
}
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) {
}
}
}
-
- /*
- * for (LockRequest request : granted) { request.callback.success(this); }
- */
callbackProcessor.addAll(granted);
}
lockRequestQueue.add(new LockRequest(callback, lockType, this));
}
- private void waitForUnlock() {
+ @SuppressWarnings("java:S2274")
+ private synchronized void waitForUnlock() {
try {
this.wait();
} catch (InterruptedException e) {
logger.warn("waitForUnlock interrupted", e);
+ Thread.currentThread().interrupt();
}
}