r14647@tombo: nickm | 2007-11-02 10:48:37 -0400

Use rlim_t instead of unsigned long to manipulate rlimit values.


svn:r12339
This commit is contained in:
Nick Mathewson 2007-11-02 14:50:37 +00:00
parent 6aeca5237d
commit e76581f97e
3 changed files with 17 additions and 3 deletions

View File

@ -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

View File

@ -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([

View File

@ -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) {