summaryrefslogtreecommitdiffstats
path: root/vespajlib/src/main/java/com/yahoo/nativec
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-26 13:47:16 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-04-26 13:47:16 +0200
commitbe717cbb0d681e1e9d0afaf9d6321dc51e556932 (patch)
tree2ac74346b29b31021af44eb34bf446f421b06466 /vespajlib/src/main/java/com/yahoo/nativec
parentcad36df5132815879cc078c3faed8ec51f13a23d (diff)
Add mallinfo2 implementation.
Diffstat (limited to 'vespajlib/src/main/java/com/yahoo/nativec')
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java29
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/NativeC.java20
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java12
-rw-r--r--vespajlib/src/main/java/com/yahoo/nativec/package-info.java5
4 files changed, 66 insertions, 0 deletions
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java
new file mode 100644
index 00000000000..1db73710d76
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/nativec/MallInfo2.java
@@ -0,0 +1,29 @@
+package com.yahoo.nativec;
+
+import com.sun.jna.Structure;
+
+public class MallInfo2 extends NativeC {
+ private final static Throwable initException = loadLibrary();
+ public static Throwable init() {
+ return initException;
+ }
+ // Equivalent JNA mapping
+ private static class MallInfo2Struct extends Structure {
+ public static class ByValue extends MallInfo2Struct implements Structure.ByValue { }
+ public long arena; /* Non-mmapped space allocated (bytes) */
+ public long ordblks; /* Number of free chunks */
+ public long smblks; /* Number of free fastbin blocks */
+ public long hblks; /* Number of mmapped regions */
+ public long hblkhd; /* Space allocated in mmapped regions (bytes) */
+ public long usmblks; /* See below */
+ public long fsmblks; /* Space in freed fastbin blocks (bytes) */
+ public long uordblks; /* Total allocated space (bytes) */
+ public long fordblks; /* Total free space (bytes) */
+ public long keepcost; /* Top-most, releasable space (bytes) */
+ }
+ private static native MallInfo2Struct.ByValue mallinfo2();
+ public MallInfo2() {
+ mallinfo = mallinfo2();
+ }
+ private final MallInfo2Struct mallinfo;
+}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java
new file mode 100644
index 00000000000..e86fe16d3f7
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/nativec/NativeC.java
@@ -0,0 +1,20 @@
+package com.yahoo.nativec;
+
+import com.sun.jna.Native;
+import com.sun.jna.Platform;
+
+class NativeC {
+ protected static Throwable loadLibrary() {
+ if (Platform.isLinux()) {
+ try {
+ Native.register(Platform.C_LIBRARY_NAME);
+ } catch (Throwable e) {
+ return e;
+ }
+ } else {
+ return new RuntimeException("Platform is unsúpported. Only supported on linux.");
+ }
+ return null;
+ }
+
+}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java
new file mode 100644
index 00000000000..b29ff889a25
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/nativec/PosixFAdvise.java
@@ -0,0 +1,12 @@
+package com.yahoo.nativec;
+
+import com.sun.jna.LastErrorException;
+
+public class PosixFAdvise extends NativeC {
+ public static final int POSIX_FADV_DONTNEED = 4; // See /usr/include/linux/fadvise.h
+ private final static Throwable initException = loadLibrary();
+ public static Throwable init() {
+ return initException;
+ }
+ public static native int posix_fadvise(int fd, long offset, long len, int flag) throws LastErrorException;
+}
diff --git a/vespajlib/src/main/java/com/yahoo/nativec/package-info.java b/vespajlib/src/main/java/com/yahoo/nativec/package-info.java
new file mode 100644
index 00000000000..cdf497ea39b
--- /dev/null
+++ b/vespajlib/src/main/java/com/yahoo/nativec/package-info.java
@@ -0,0 +1,5 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+@ExportPackage
+package com.yahoo.nativec;
+
+import com.yahoo.osgi.annotation.ExportPackage;