summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-26 15:17:53 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-04-26 15:17:53 +0200
commit077869e1bdf42433947b52d8787683ea431196ca (patch)
treea554ec3c25a49771914bbec4196b1d70836f1b12
parentbe717cbb0d681e1e9d0afaf9d6321dc51e556932 (diff)
Add MallInfo
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java14
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java29
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java4
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/NativeC.java4
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java4
-rw-r--r--vespajlib/src/test/java/com/yahoo/nativec/GlibCTestCase.java (renamed from vespajlib/src/test/java/com/yahoo/nativec/PosixFAdviseTestCase.java)13
-rw-r--r--vespajlib/src/test/java/com/yahoo/nativec/MallInfoTestCase.java (renamed from vespajlib/src/test/java/com/yahoo/nativec/MallInfo2TestCase.java)10
7 files changed, 70 insertions, 8 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java
new file mode 100644
index 00000000000..b404e5b00df
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/nativec/GLibcVersion.java
@@ -0,0 +1,14 @@
+package com.yahoo.nativec;
+
+public class GLibcVersion {
+ private final static Throwable initException = NativeC.loadLibrary(GLibcVersion.class);
+ public static Throwable init() {
+ return initException;
+ }
+ private final String version;
+ public GLibcVersion() {
+ version = gnu_get_libc_version();
+ }
+ private native static String gnu_get_libc_version();
+ public String version() { return version; }
+}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java
new file mode 100644
index 00000000000..c9d781ddd4d
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo.java
@@ -0,0 +1,29 @@
+package com.yahoo.nativec;
+
+import com.sun.jna.Structure;
+
+public class MallInfo {
+ private final static Throwable initException = NativeC.loadLibrary(MallInfo.class);
+ public static Throwable init() {
+ return initException;
+ }
+ // Equivalent JNA mapping
+ private static class MallInfoStruct extends Structure {
+ public static class ByValue extends MallInfoStruct implements Structure.ByValue { }
+ public int arena; /* Non-mmapped space allocated (bytes) */
+ public int ordblks; /* Number of free chunks */
+ public int smblks; /* Number of free fastbin blocks */
+ public int hblks; /* Number of mmapped regions */
+ public int hblkhd; /* Space allocated in mmapped regions (bytes) */
+ public int usmblks; /* See below */
+ public int fsmblks; /* Space in freed fastbin blocks (bytes) */
+ public int uordblks; /* Total allocated space (bytes) */
+ public int fordblks; /* Total free space (bytes) */
+ public int keepcost; /* Top-most, releasable space (bytes) */
+ }
+ private static native MallInfoStruct.ByValue mallinfo();
+ public MallInfo() {
+ mallinfo = mallinfo();
+ }
+ private final MallInfoStruct mallinfo;
+}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java
index 1db73710d76..73adcc5f9a2 100644
--- a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java
+++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java
@@ -2,8 +2,8 @@ package com.yahoo.nativec;
import com.sun.jna.Structure;
-public class MallInfo2 extends NativeC {
- private final static Throwable initException = loadLibrary();
+public class MallInfo2 {
+ private final static Throwable initException = NativeC.loadLibrary(MallInfo2.class);
public static Throwable init() {
return initException;
}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java
index e86fe16d3f7..4d808b4b155 100644
--- a/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java
+++ b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java
@@ -4,10 +4,10 @@ import com.sun.jna.Native;
import com.sun.jna.Platform;
class NativeC {
- protected static Throwable loadLibrary() {
+ static Throwable loadLibrary(Class<?> cls) {
if (Platform.isLinux()) {
try {
- Native.register(Platform.C_LIBRARY_NAME);
+ Native.register(cls, Platform.C_LIBRARY_NAME);
} catch (Throwable e) {
return e;
}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java
index b29ff889a25..3e2c26d2ef2 100644
--- a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java
+++ b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java
@@ -2,9 +2,9 @@ package com.yahoo.nativec;
import com.sun.jna.LastErrorException;
-public class PosixFAdvise extends NativeC {
+public class PosixFAdvise {
public static final int POSIX_FADV_DONTNEED = 4; // See /usr/include/linux/fadvise.h
- private final static Throwable initException = loadLibrary();
+ private final static Throwable initException = NativeC.loadLibrary(PosixFAdvise.class);
public static Throwable init() {
return initException;
}
diff --git a/vespajlib/src/test/java/com/yahoo/nativec/PosixFAdviseTestCase.java b/vespajlib/src/test/java/com/yahoo/nativec/GlibCTestCase.java
index 8750dcb0a86..25ff67182f6 100644
--- a/vespajlib/src/test/java/com/yahoo/nativec/PosixFAdviseTestCase.java
+++ b/vespajlib/src/test/java/com/yahoo/nativec/GlibCTestCase.java
@@ -4,9 +4,10 @@ import com.sun.jna.Platform;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
-public class PosixFAdviseTestCase {
+public class GlibCTestCase {
@Test
public void requireThatPosixFAdviseIsDetected() {
if (Platform.isLinux()) {
@@ -15,4 +16,14 @@ public class PosixFAdviseTestCase {
assertEquals("Platform is unsúpported. Only supported on linux.", PosixFAdvise.init().getMessage());
}
}
+
+ @Test
+ public void requireGlibcVersionIsDetected() {
+ if (Platform.isLinux()) {
+ assertNull(GLibcVersion.init());
+ assertNotEquals("", new GLibcVersion().version());
+ } else {
+ assertEquals("Platform is unsúpported. Only supported on linux.", PosixFAdvise.init().getMessage());
+ }
+ }
}
diff --git a/vespajlib/src/test/java/com/yahoo/nativec/MallInfo2TestCase.java b/vespajlib/src/test/java/com/yahoo/nativec/MallInfoTestCase.java
index 87a92a2d640..378e994fe84 100644
--- a/vespajlib/src/test/java/com/yahoo/nativec/MallInfo2TestCase.java
+++ b/vespajlib/src/test/java/com/yahoo/nativec/MallInfoTestCase.java
@@ -6,7 +6,7 @@ import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
-public class MallInfo2TestCase {
+public class MallInfoTestCase {
@Test
public void requireThatMallInfo2IsDetected() {
if (Platform.isLinux()) {
@@ -15,4 +15,12 @@ public class MallInfo2TestCase {
assertEquals("Platform is unsúpported. Only supported on linux.", MallInfo2.init().getMessage());
}
}
+ @Test
+ public void requireThatMallInfoIsDetected() {
+ if (Platform.isLinux()) {
+ assertNull(MallInfo.init());
+ } else {
+ assertEquals("Platform is unsúpported. Only supported on linux.", MallInfo.init().getMessage());
+ }
+ }
}