|
@@ -327,18 +327,29 @@ void os_set_line_buffering(void)
|
|
|
setvbuf(stdout, NULL, _IOLBF, 0);
|
|
|
}
|
|
|
|
|
|
-int os_mlock(void)
|
|
|
+int os_mlock(bool on_fault)
|
|
|
{
|
|
|
#ifdef HAVE_MLOCKALL
|
|
|
int ret = 0;
|
|
|
+ int flags = MCL_CURRENT | MCL_FUTURE;
|
|
|
|
|
|
- ret = mlockall(MCL_CURRENT | MCL_FUTURE);
|
|
|
+ if (on_fault) {
|
|
|
+#ifdef HAVE_MLOCK_ONFAULT
|
|
|
+ flags |= MCL_ONFAULT;
|
|
|
+#else
|
|
|
+ error_report("mlockall: on_fault not supported");
|
|
|
+ return -EINVAL;
|
|
|
+#endif
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = mlockall(flags);
|
|
|
if (ret < 0) {
|
|
|
error_report("mlockall: %s", strerror(errno));
|
|
|
}
|
|
|
|
|
|
return ret;
|
|
|
#else
|
|
|
+ (void)on_fault;
|
|
|
return -ENOSYS;
|
|
|
#endif
|
|
|
}
|