From 41a0f22468e484dffc0a4432209ac1c5637dbf72 Mon Sep 17 00:00:00 2001 From: TheMode Date: Sat, 24 Apr 2021 21:39:39 +0200 Subject: [PATCH] Prevent Acquired from being used after unlock --- .../java/net/minestom/server/acquirable/Acquired.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/net/minestom/server/acquirable/Acquired.java b/src/main/java/net/minestom/server/acquirable/Acquired.java index c6f9a8ddd..d43c8bca9 100644 --- a/src/main/java/net/minestom/server/acquirable/Acquired.java +++ b/src/main/java/net/minestom/server/acquirable/Acquired.java @@ -1,5 +1,6 @@ package net.minestom.server.acquirable; +import net.minestom.server.utils.validate.Check; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,6 +13,8 @@ public class Acquired { private final boolean locked; private final ReentrantLock lock; + private boolean unlocked; + protected Acquired(@NotNull T value, boolean locked, @Nullable ReentrantLock lock) { this.value = value; @@ -20,13 +23,20 @@ public class Acquired { } public @NotNull T get() { + checkLock(); return value; } public void unlock() { + checkLock(); + this.unlocked = true; if (!locked) return; Acquisition.acquireLeave(lock); } + private void checkLock() { + Check.stateCondition(unlocked, "The acquired element has already been unlocked!"); + } + }