@@ -72,6 +72,7 @@ pub const Kevent = system.Kevent;
72
72
pub const LOCK = system .LOCK ;
73
73
pub const MADV = system .MADV ;
74
74
pub const MAP = system .MAP ;
75
+ pub const MCL = system .MCL ;
75
76
pub const MSF = system .MSF ;
76
77
pub const MAX_ADDR_LEN = system .MAX_ADDR_LEN ;
77
78
pub const MFD = system .MFD ;
@@ -7075,6 +7076,47 @@ pub fn madvise(ptr: [*]align(mem.page_size) u8, length: usize, advice: u32) Madv
7075
7076
}
7076
7077
}
7077
7078
7079
+ pub const MlockallError = error {
7080
+ InvalidArgument ,
7081
+ LockedMemoryLimitExceeded ,
7082
+ NotImplemented ,
7083
+ PermissionDenied ,
7084
+ SystemResources ,
7085
+ } || UnexpectedError ;
7086
+
7087
+ pub fn mlockall (flags : i32 ) MlockallError ! void {
7088
+ switch (native_os ) {
7089
+ .linux , .freebsd , .netbsd , .openbsd , .dragonfly , .solaris = > {},
7090
+ else = > return error .NotImplemented ,
7091
+ }
7092
+ switch (errno (system .mlockall (flags ))) {
7093
+ .SUCCESS = > return ,
7094
+ .INVAL = > return error .InvalidArgument ,
7095
+ .NOMEM = > return error .LockedMemoryLimitExceeded ,
7096
+ .PERM = > return error .PermissionDenied ,
7097
+ // Solaris and (Free|Net|Open)BSD, presumably no room to fault in locked stuff:
7098
+ .AGAIN = > return error .SystemResources ,
7099
+ else = > | err | return unexpectedErrno (err ),
7100
+ }
7101
+ }
7102
+
7103
+ pub const MunlockallError = error {
7104
+ NotImplemented ,
7105
+ PermissionDenied ,
7106
+ } || UnexpectedError ;
7107
+
7108
+ pub fn munlockall () MunlockallError ! void {
7109
+ switch (native_os ) {
7110
+ .linux , .freebsd , .netbsd , .openbsd , .dragonfly , .solaris = > {},
7111
+ else = > return error .NotImplemented ,
7112
+ }
7113
+ switch (errno (system .munlockall ())) {
7114
+ .SUCCESS = > return ,
7115
+ .PERM = > return error .PermissionDenied , // Solaris, possibly BSDs as well
7116
+ else = > | err | return unexpectedErrno (err ),
7117
+ }
7118
+ }
7119
+
7078
7120
pub const PerfEventOpenError = error {
7079
7121
/// Returned if the perf_event_attr size value is too small (smaller
7080
7122
/// than PERF_ATTR_SIZE_VER0), too big (larger than the page size),
0 commit comments