summaryrefslogtreecommitdiffstats
path: root/ctdb/common/system_util.c
diff options
context:
space:
mode:
Diffstat (limited to 'ctdb/common/system_util.c')
-rw-r--r--ctdb/common/system_util.c28
1 files changed, 28 insertions, 0 deletions
diff --git a/ctdb/common/system_util.c b/ctdb/common/system_util.c
index 4f6401690b3..d2d9b31e820 100644
--- a/ctdb/common/system_util.c
+++ b/ctdb/common/system_util.c
@@ -20,6 +20,7 @@
#include "includes.h"
#include "system/filesys.h"
+#include "system/shmem.h"
#include <libgen.h>
@@ -275,6 +276,33 @@ bool parse_ip_port(const char *addr, ctdb_sock_addr *saddr)
return ret;
}
+/* we don't lock future pages here; it would increase the chance that
+ * we'd fail to mmap later on. */
+void lockdown_memory(bool valgrinding)
+{
+#if defined(HAVE_MLOCKALL) && !defined(_AIX_)
+ /* Extra stack, please! */
+ char dummy[10000];
+ memset(dummy, 0, sizeof(dummy));
+
+ if (valgrinding) {
+ return;
+ }
+
+ /* Ignore when running in local daemons mode */
+ if (getuid() != 0) {
+ return;
+ }
+
+ /* Avoid compiler optimizing out dummy. */
+ mlock(dummy, sizeof(dummy));
+ if (mlockall(MCL_CURRENT) != 0) {
+ DEBUG(DEBUG_WARNING,("Failed to lockdown memory: %s'\n",
+ strerror(errno)));
+ }
+#endif
+}
+
int mkdir_p(const char *dir, int mode)
{
char t[PATH_MAX];