summaryrefslogtreecommitdiffstats
path: root/vpp-japi/japi/org/openvpp/vppjapi/vppConn.java
diff options
context:
space:
mode:
authorRobert Varga <nite@hq.sk>2016-02-14 02:10:18 +0100
committerGerrit Code Review <gerrit@fd.io>2016-02-19 21:02:59 +0000
commite1cfcbcda62a94caffc3cf2a40f3440d3752f9d9 (patch)
treed70e953694948b12afd0e22a302407b64d7fb5a2 /vpp-japi/japi/org/openvpp/vppjapi/vppConn.java
parent9b7057fe36d00adc136b4f41c699041c1591635d (diff)
Rebalance checkConnected()
AtomicBoolean forces the enclosed boolean to be cache-aligned, needlessly hitting a cacheline. Since we only flip state only once, when the connection is severed, we can turn this into a volatile boolean. Doing that is costing us a synchronized close(), but that is perfectly acceptable, as that is called only once. Change-Id: I76fda3d3f65a5f800e7d3970b0b8fe99fb3e8b6d Signed-off-by: Robert Varga <nite@hq.sk>
Diffstat (limited to 'vpp-japi/japi/org/openvpp/vppjapi/vppConn.java')
-rw-r--r--vpp-japi/japi/org/openvpp/vppjapi/vppConn.java17
1 files changed, 9 insertions, 8 deletions
diff --git a/vpp-japi/japi/org/openvpp/vppjapi/vppConn.java b/vpp-japi/japi/org/openvpp/vppjapi/vppConn.java
index 8de806dc12a..3e8c12a93f9 100644
--- a/vpp-japi/japi/org/openvpp/vppjapi/vppConn.java
+++ b/vpp-japi/japi/org/openvpp/vppjapi/vppConn.java
@@ -23,7 +23,6 @@ import java.nio.file.StandardCopyOption;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
import org.openvpp.vppjapi.vppVersion;
import org.openvpp.vppjapi.vppInterfaceDetails;
@@ -39,8 +38,8 @@ public class vppConn implements AutoCloseable {
static {
try {
loadLibrary();
- } catch (IOException | RuntimeException e) {
- System.out.printf ("Can't find vpp jni library: %s\n", LIBNAME);
+ } catch (Exception e) {
+ System.out.printf("Can't find vpp jni library: %s\n", LIBNAME);
throw new ExceptionInInitializerError(e);
}
}
@@ -67,7 +66,7 @@ public class vppConn implements AutoCloseable {
private static void loadLibrary() throws IOException {
try (final InputStream is = vppConn.class.getResourceAsStream('/' + LIBNAME)) {
if (is == null) {
- throw new IOException(String.format("Failed to open library resource %s",
+ throw new IOException(String.format("Failed to open library resource %s",
LIBNAME));
}
loadStream(is);
@@ -75,8 +74,8 @@ public class vppConn implements AutoCloseable {
}
private static vppConn currentConnection = null;
- private final AtomicBoolean disconnected = new AtomicBoolean(false);
private final String clientName;
+ private volatile boolean disconnected = false;
// Hidden on purpose to prevent external instantiation
vppConn(final String clientName) throws IOException {
@@ -97,8 +96,10 @@ public class vppConn implements AutoCloseable {
}
@Override
- public final void close() {
- if (disconnected.compareAndSet(false, true)) {
+ public synchronized final void close() {
+ if (!disconnected) {
+ disconnected = true;
+
synchronized (vppConn.class) {
clientDisconnect();
currentConnection = null;
@@ -112,7 +113,7 @@ public class vppConn implements AutoCloseable {
* @throws IllegalStateException if this instance was disconnected.
*/
protected final void checkConnected() {
- if (disconnected.get()) {
+ if (disconnected) {
throw new IllegalStateException("Disconnected client " + clientName);
}
}