Merge commit 'sebastian/mlockall'

This commit is contained in:
Nick Mathewson 2010-08-03 10:50:18 -04:00
commit 51377ae1bb

View File

@ -2297,30 +2297,18 @@ tor_set_max_memlock(void)
*/
struct rlimit limit;
int ret;
/* Do we want to report current limits first? This is not really needed. */
ret = getrlimit(RLIMIT_MEMLOCK, &limit);
if (ret == -1) {
log_warn(LD_GENERAL, "Could not get RLIMIT_MEMLOCK: %s", strerror(errno));
return -1;
}
/* RLIM_INFINITY is -1 on some platforms. */
limit.rlim_cur = RLIM_INFINITY;
limit.rlim_max = RLIM_INFINITY;
ret = setrlimit(RLIMIT_MEMLOCK, &limit);
if (ret == -1) {
if (setrlimit(RLIMIT_MEMLOCK, &limit) == -1) {
if (errno == EPERM) {
log_warn(LD_GENERAL, "You appear to lack permissions to change memory "
"limits. Are you root?");
log_warn(LD_GENERAL, "Unable to raise RLIMIT_MEMLOCK: %s",
strerror(errno));
} else {
log_warn(LD_GENERAL, "Could not raise RLIMIT_MEMLOCK: %s",
strerror(errno));
}
log_warn(LD_GENERAL, "Unable to raise RLIMIT_MEMLOCK: %s",
strerror(errno));
return -1;
}
@ -2353,12 +2341,11 @@ tor_mlockall(void)
#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL && defined(RLIMIT_MEMLOCK)
if (tor_set_max_memlock() == 0) {
/* Perhaps we only want to log this if we're in a verbose mode? */
log_notice(LD_GENERAL, "RLIMIT_MEMLOCK is now set to RLIM_INFINITY.");
log_debug(LD_GENERAL, "RLIMIT_MEMLOCK is now set to RLIM_INFINITY.");
}
if (mlockall(MCL_CURRENT|MCL_FUTURE) == 0) {
log_notice(LD_GENERAL, "Insecure OS paging is effectively disabled.");
log_info(LD_GENERAL, "Insecure OS paging is effectively disabled.");
return 0;
} else {
if (errno == ENOSYS) {