summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Nierlein <sven@nierlein.org>2014-11-28 14:48:26 (GMT)
committerSven Nierlein <sven@nierlein.org>2014-11-28 14:48:26 (GMT)
commit8b272a7f7baa7d743841da713a27284b0479d0e1 (patch)
treea70b7d276156d045a99e532b927cfff66806ba18
parent054bfc992239e531ab6c9bb7e3a5d777f3c8a009 (diff)
parent7660540c31342eb7ea2f2ac24950094bf74f0a6f (diff)
downloadmonitoring-plugins-8b272a7.tar.gz
Merge pull request #1304 from monitoring-plugins/pr-1183-enhanced
merge pull request #1300 while moving values to constants
-rw-r--r--lib/utils_cmd.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/lib/utils_cmd.c b/lib/utils_cmd.c
index 9e214bd..7eb9a3a 100644
--- a/lib/utils_cmd.c
+++ b/lib/utils_cmd.c
@@ -79,12 +79,14 @@ static pid_t *_cmd_pids = NULL;
79 * If that fails and the macro isn't defined, we fall back to an educated 79 * If that fails and the macro isn't defined, we fall back to an educated
80 * guess. There's no guarantee that our guess is adequate and the program 80 * guess. There's no guarantee that our guess is adequate and the program
81 * will die with SIGSEGV if it isn't and the upper boundary is breached. */ 81 * will die with SIGSEGV if it isn't and the upper boundary is breached. */
82#define DEFAULT_MAXFD 256 /* fallback value if no max open files value is set */
83#define MAXFD_LIMIT 8192 /* upper limit of open files */
82#ifdef _SC_OPEN_MAX 84#ifdef _SC_OPEN_MAX
83static long maxfd = 0; 85static long maxfd = 0;
84#elif defined(OPEN_MAX) 86#elif defined(OPEN_MAX)
85# define maxfd OPEN_MAX 87# define maxfd OPEN_MAX
86#else /* sysconf macro unavailable, so guess (may be wildly inaccurate) */ 88#else /* sysconf macro unavailable, so guess (may be wildly inaccurate) */
87# define maxfd 256 89# define maxfd DEFAULT_MAXFD
88#endif 90#endif
89 91
90 92
@@ -112,10 +114,18 @@ cmd_init (void)
112 if (!maxfd && (maxfd = sysconf (_SC_OPEN_MAX)) < 0) { 114 if (!maxfd && (maxfd = sysconf (_SC_OPEN_MAX)) < 0) {
113 /* possibly log or emit a warning here, since there's no 115 /* possibly log or emit a warning here, since there's no
114 * guarantee that our guess at maxfd will be adequate */ 116 * guarantee that our guess at maxfd will be adequate */
115 maxfd = 256; 117 maxfd = DEFAULT_MAXFD;
116 } 118 }
117#endif 119#endif
118 120
121 /* if maxfd is unnaturally high, we force it to a lower value
122 * ( e.g. on SunOS, when ulimit is set to unlimited: 2147483647 this would cause
123 * a segfault when following calloc is called ... ) */
124
125 if ( maxfd > MAXFD_LIMIT ) {
126 maxfd = MAXFD_LIMIT;
127 }
128
119 if (!_cmd_pids) 129 if (!_cmd_pids)
120 _cmd_pids = calloc (maxfd, sizeof (pid_t)); 130 _cmd_pids = calloc (maxfd, sizeof (pid_t));
121} 131}