summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGurucharan Shetty <gshetty@nicira.com>2014-02-21 08:46:31 -0800
committerGurucharan Shetty <gshetty@nicira.com>2014-02-21 14:44:31 -0800
commit4f57ad100f4556c45a7ad4c4fe904545a99976e5 (patch)
tree39d61fc68ae31ecd373b933554c1d29483a404b3
parent7ff04d92445beaaea4123cbc3083d950278b1d55 (diff)
downloadopenvswitch-4f57ad100f4556c45a7ad4c4fe904545a99976e5.tar.gz
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 <gshetty@nicira.com> Acked-by: Ben Pfaff <blp@nicira.com>
-rw-r--r--lib/process.c43
-rw-r--r--lib/socket-util.c43
-rw-r--r--lib/socket-util.h2
3 files changed, 43 insertions, 45 deletions
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);