From: Gurucharan Shetty Date: Fri, 21 Feb 2014 16:46:31 +0000 (-0800) Subject: socket-util: Move get_max_fds() to process.c. X-Git-Tag: sliver-openvswitch-2.1.90-1~1^2~9 X-Git-Url: http://git.onelab.eu/?p=sliver-openvswitch.git;a=commitdiff_plain;h=4f57ad100f4556c45a7ad4c4fe904545a99976e5 socket-util: Move get_max_fds() to process.c. get_max_fds() is used only from process.c. Move it there along with rlim_is_finite(). Since process_start() can only be called before any additional threads are created, we no longer need the thread safety checks in get_max_fds(). Signed-off-by: Gurucharan Shetty Acked-by: Ben Pfaff --- diff --git a/lib/process.c b/lib/process.c index d0e18821b..b479d005d 100644 --- a/lib/process.c +++ b/lib/process.c @@ -165,6 +165,49 @@ process_register(const char *name, pid_t pid) return p; } +#ifndef _WIN32 +static bool +rlim_is_finite(rlim_t limit) +{ + if (limit == RLIM_INFINITY) { + return false; + } + +#ifdef RLIM_SAVED_CUR /* FreeBSD 8.0 lacks RLIM_SAVED_CUR. */ + if (limit == RLIM_SAVED_CUR) { + return false; + } +#endif + +#ifdef RLIM_SAVED_MAX /* FreeBSD 8.0 lacks RLIM_SAVED_MAX. */ + if (limit == RLIM_SAVED_MAX) { + return false; + } +#endif + + return true; +} + +/* Returns the maximum valid FD value, plus 1. */ +static int +get_max_fds(void) +{ + static int max_fds; + + if (!max_fds) { + struct rlimit r; + if (!getrlimit(RLIMIT_NOFILE, &r) && rlim_is_finite(r.rlim_cur)) { + max_fds = r.rlim_cur; + } else { + VLOG_WARN("failed to obtain fd limit, defaulting to 1024"); + max_fds = 1024; + } + } + + return max_fds; +} +#endif /* _WIN32 */ + /* Starts a subprocess with the arguments in the null-terminated argv[] array. * argv[0] is used as the name of the process. Searches the PATH environment * variable to find the program to execute. diff --git a/lib/socket-util.c b/lib/socket-util.c index a428534e2..c1c41ec30 100644 --- a/lib/socket-util.c +++ b/lib/socket-util.c @@ -122,49 +122,6 @@ set_dscp(int fd, uint8_t dscp) return 0; } -static bool -rlim_is_finite(rlim_t limit) -{ - if (limit == RLIM_INFINITY) { - return false; - } - -#ifdef RLIM_SAVED_CUR /* FreeBSD 8.0 lacks RLIM_SAVED_CUR. */ - if (limit == RLIM_SAVED_CUR) { - return false; - } -#endif - -#ifdef RLIM_SAVED_MAX /* FreeBSD 8.0 lacks RLIM_SAVED_MAX. */ - if (limit == RLIM_SAVED_MAX) { - return false; - } -#endif - - return true; -} - -/* Returns the maximum valid FD value, plus 1. */ -int -get_max_fds(void) -{ - static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER; - static int max_fds; - - if (ovsthread_once_start(&once)) { - struct rlimit r; - if (!getrlimit(RLIMIT_NOFILE, &r) && rlim_is_finite(r.rlim_cur)) { - max_fds = r.rlim_cur; - } else { - VLOG_WARN("failed to obtain fd limit, defaulting to 1024"); - max_fds = 1024; - } - ovsthread_once_done(&once); - } - - return max_fds; -} - /* Translates 'host_name', which must be a string representation of an IP * address, into a numeric IP address in '*addr'. Returns 0 if successful, * otherwise a positive errno value. */ diff --git a/lib/socket-util.h b/lib/socket-util.h index c303ad031..f7f128a3f 100644 --- a/lib/socket-util.h +++ b/lib/socket-util.h @@ -31,8 +31,6 @@ int set_nonblocking(int fd); void xset_nonblocking(int fd); int set_dscp(int fd, uint8_t dscp); -int get_max_fds(void); - int lookup_ip(const char *host_name, struct in_addr *address); int lookup_ipv6(const char *host_name, struct in6_addr *address);