diff options
author | Nick Mathewson <nickm@torproject.org> | 2007-11-02 14:50:37 +0000 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2007-11-02 14:50:37 +0000 |
commit | e76581f97eb849a0e3de869828f4ff809d00e9ba (patch) | |
tree | 5a064235a2136598fc3cf20477e3de5bf1460fe6 | |
parent | 6aeca5237d3e801cc6da07a83af22bb159be703b (diff) | |
download | tor-e76581f97eb849a0e3de869828f4ff809d00e9ba.tar.gz tor-e76581f97eb849a0e3de869828f4ff809d00e9ba.zip |
r14647@tombo: nickm | 2007-11-02 10:48:37 -0400
Use rlim_t instead of unsigned long to manipulate rlimit values.
svn:r12339
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | configure.in | 6 | ||||
-rw-r--r-- | src/common/compat.c | 11 |
3 files changed, 17 insertions, 3 deletions
@@ -76,6 +76,9 @@ Changes in version 0.2.0.10-alpha - 2007-1?-?? - Stop leaking v2_download_status_map on shutdown. Bugfix on 0.2.0.9-alpha. + - Minor bugfixes (portability): + - Run correctly on platforms where rlim_t is larger than unsigned long. + Changes in version 0.2.0.9-alpha - 2007-10-24 This ninth development snapshot switches clients to the new v3 directory diff --git a/configure.in b/configure.in index 3abcf2648e..5ad8617ab3 100644 --- a/configure.in +++ b/configure.in @@ -362,6 +362,12 @@ AC_CHECK_TYPES([struct in6_addr, struct sockaddr_in6, struct sockaddr_storage, s #endif ]) +AC_CHECK_TYPES([rlim_t], , , +[#ifdef HAVE_SYS_RESOURCE_H +#include <sys/resource.h> +#endif +]) + if test -z "$CROSS_COMPILE"; then AC_CACHE_CHECK([whether time_t is signed], tor_cv_time_t_signed, [ AC_RUN_IFELSE(AC_LANG_SOURCE([ diff --git a/src/common/compat.c b/src/common/compat.c index 1bc653f25a..b46591701e 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -663,6 +663,10 @@ tor_socketpair(int family, int type, int protocol, int fd[2]) #define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond _ConnLimit */ +#if defined(HAVE_GETRLIMIT) && !defined(HAVE_RLIM_T) +typedef unsigned long rlim_t; +#endif + /** Learn the maximum allowed number of file descriptors. (Some systems * have a low soft limit. * @@ -684,7 +688,7 @@ set_max_file_descriptors(unsigned long limit, unsigned long cap) } #else struct rlimit rlim; - unsigned long most; + rlim_t most; tor_assert(limit > 0); tor_assert(cap > 0); @@ -693,16 +697,17 @@ set_max_file_descriptors(unsigned long limit, unsigned long cap) strerror(errno)); return -1; } + //log_notice(LD_CONFIG, "%llu %llu", rlim.rlim_cur, rlim.rlim_max); if ((unsigned long)rlim.rlim_max < limit) { log_warn(LD_CONFIG,"We need %lu file descriptors available, and we're " "limited to %lu. Please change your ulimit -n.", limit, (unsigned long)rlim.rlim_max); return -1; } - most = ((unsigned long)rlim.rlim_max > cap) ? cap : (unsigned) rlim.rlim_max; + most = rlim.rlim_max > (rlim_t)cap ? (rlim_t)cap : rlim.rlim_max; if (most > (unsigned long)rlim.rlim_cur) { log_info(LD_NET,"Raising max file descriptors from %lu to %lu.", - (unsigned long)rlim.rlim_cur, most); + (unsigned long)rlim.rlim_cur, (unsigned long)most); } rlim.rlim_cur = most; if (setrlimit(RLIMIT_NOFILE, &rlim) != 0) { |