diff options
Diffstat (limited to 'ctdb/common/system_util.c')
-rw-r--r-- | ctdb/common/system_util.c | 28 |
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]; |