Skip to content

Commit 54e8ed5

Browse files
authored
runtime: add used_memory implementation for OpenBSD (#24918)
1 parent c3dfe62 commit 54e8ed5

File tree

2 files changed

+28
-2
lines changed

2 files changed

+28
-2
lines changed

vlib/runtime/used_memory_default.c.v

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
module runtime
22

33
// used_memory retrieves the current physical memory usage of the process.
4-
// Note: implementation available only on FreeBSD, macOS, Linux and Windows. Otherwise,
5-
// returns 'used_memory: not implemented'.
4+
// Note: implementation available only on FreeBSD, macOS, Linux, OpenBSD and
5+
// Windows. Otherwise, returns 'used_memory: not implemented'.
66
pub fn used_memory() !u64 {
77
return error('used_memory: not implemented')
88
}

vlib/runtime/used_memory_openbsd.c.v

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module runtime
2+
3+
#include <sys/resource.h>
4+
5+
struct C.rusage {
6+
ru_maxrss int
7+
}
8+
9+
fn C.getrusage(who int, usage &C.rusage) int
10+
11+
// used_memory retrieves the current physical memory usage of the process.
12+
pub fn used_memory() !u64 {
13+
page_size := usize(C.sysconf(C._SC_PAGESIZE))
14+
c_errno_1 := C.errno
15+
if page_size == usize(-1) {
16+
return error('used_memory: C.sysconf() return error code = ${c_errno_1}')
17+
}
18+
19+
mut usage := C.rusage{}
20+
ret := C.getrusage(C.RUSAGE_SELF, &usage)
21+
if ret == -1 {
22+
c_errno_2 := C.errno
23+
return error('used_memory: C.getrusage() return error code = ${c_errno_2}')
24+
}
25+
return u64(int_max(1, usage.ru_maxrss)) * 1024
26+
}

0 commit comments

Comments
 (0)