summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java2
-rw-r--r--vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java16
2 files changed, 9 insertions, 9 deletions
diff --git a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
index f2dd445f8c8..70821d29932 100644
--- a/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
+++ b/node-admin/src/main/java/com/yahoo/vespa/hosted/node/admin/nodeadmin/NodeAdminStateUpdater.java
@@ -87,7 +87,7 @@ public class NodeAdminStateUpdater {
this.loopThread = new Thread(() -> {
log.info(objectToString() + ": Acquiring lock");
try {
- classLock = Optional.of(classLocking.tryLock(NodeAdminStateUpdater.class, () -> !terminated.get()));
+ classLock = Optional.of(classLocking.lockWhile(NodeAdminStateUpdater.class, () -> !terminated.get()));
} catch (LockInterruptException e) {
classLock = Optional.empty();
return;
diff --git a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java
index 61e6850ee2e..a6347d9fb14 100644
--- a/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java
+++ b/vespajlib/src/main/java/com/yahoo/concurrent/classlock/ClassLocking.java
@@ -2,7 +2,7 @@ package com.yahoo.concurrent.classlock;
import java.util.HashMap;
import java.util.Map;
-import java.util.function.Supplier;
+import java.util.function.BooleanSupplier;
/**
* @author valerijf
@@ -11,18 +11,18 @@ public class ClassLocking {
private final Map<Class<?>, ClassLock> classLocks = new HashMap<>();
public synchronized ClassLock lock(Class<?> clazz) {
- return tryLock(clazz, () -> true);
+ return lockWhile(clazz, () -> true);
}
- public synchronized ClassLock tryLock(Class<?> clazz, Supplier<Boolean> continueRetrying) {
+ public synchronized ClassLock lockWhile(Class<?> clazz, BooleanSupplier interruptCondition) {
while(classLocks.containsKey(clazz)) {
try {
wait();
- } catch (InterruptedException ignored) {
- if (! continueRetrying.get()) {
- throw new LockInterruptException();
- }
- }
+ } catch (InterruptedException ignored) { }
+ }
+
+ if (! interruptCondition.getAsBoolean()) {
+ throw new LockInterruptException();
}
ClassLock classLock = new ClassLock(this, clazz);