blob: ef492552fb4c66089518950005393c6f561f9365 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.jdisc.refcount;
import com.yahoo.jdisc.ResourceReference;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* Ensures that a ResourceReference can only be closed exactly once.
*
* @author baldersheim
*/
abstract class CloseableOnce implements ResourceReference {
private final AtomicBoolean isReleased = new AtomicBoolean(false);
@Override
public final void close() {
final boolean wasReleasedBefore = isReleased.getAndSet(true);
if (wasReleasedBefore) {
final String message = "Reference is already released and can only be released once."
+ " State={ " + getReferences().currentState() + " }";
throw new IllegalStateException(message);
}
onClose();
}
abstract void onClose();
abstract References getReferences();
}
|