Fix compilation on OSX 10.3.

On this OSX version, there is a stub mlockall() function
that doesn't work, *and* the declaration for it is hidden by
an '#ifdef _P1003_1B_VISIBLE'.  This would make autoconf
successfully find the function, but our code fail to build
when no declaration was found.

This patch adds an additional test for the declaration.
This commit is contained in:
Nick Mathewson 2009-11-20 13:28:16 -05:00
parent 1ee580407c
commit 444eff6286
3 changed files with 14 additions and 8 deletions

View File

@ -1,3 +1,7 @@
Changes in version 0.2.2.7-alpha - 2009-??-??
o Minor bugfixes:
- Fix compilation on OSX 10.3, which has a stub mlockall() but hides it.
Changes in version 0.2.2.6-alpha - 2009-11-19
o Major features:
- Directory authorities can now create, vote on, and serve multiple

View File

@ -629,9 +629,14 @@ if test x$tcmalloc = xyes ; then
fi
# By default, we're going to assume we don't have mlockall()
# bionic and other platforms have various broken mlockall subsystems
# some of systems don't have a working mlockall, some aren't linkable
# bionic and other platforms have various broken mlockall subsystems.
# Some systems don't have a working mlockall, some aren't linkable,
# and some have it but don't declare it.
AC_CHECK_FUNCS(mlockall)
AC_CHECK_DECLS([mlockall], , , [
#ifdef HAVE_SYS_MMAN_H
#include <sys/mman.h>
#endif])
# Allow user to specify an alternate syslog facility
AC_ARG_WITH(syslog-facility,

View File

@ -2258,7 +2258,6 @@ int
tor_mlockall(void)
{
static int memory_lock_attempted = 0;
int ret;
if (memory_lock_attempted) {
return 1;
@ -2273,15 +2272,13 @@ tor_mlockall(void)
* http://msdn.microsoft.com/en-us/library/aa366895(VS.85).aspx
*/
#ifdef HAVE_MLOCKALL
ret = tor_set_max_memlock();
if (ret == 0) {
#if defined(HAVE_MLOCKALL) && HAVE_DECL_MLOCKALL
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.");
}
ret = mlockall(MCL_CURRENT|MCL_FUTURE);
if (ret == 0) {
if (mlockall(MCL_CURRENT|MCL_FUTURE) == 0) {
log_notice(LD_GENERAL, "Insecure OS paging is effectively disabled.");
return 0;
} else {