summaryrefslogtreecommitdiffstats
path: root/lib/utils_cmd.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/utils_cmd.c')
-rw-r--r--lib/utils_cmd.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/utils_cmd.c b/lib/utils_cmd.c
index 883f1ec..f66fd57 100644
--- a/lib/utils_cmd.c
+++ b/lib/utils_cmd.c
@@ -53,6 +53,9 @@
53static pid_t *_cmd_pids = NULL; 53static pid_t *_cmd_pids = NULL;
54 54
55#include "utils_base.h" 55#include "utils_base.h"
56
57#include "./maxfd.h"
58
56#include <fcntl.h> 59#include <fcntl.h>
57 60
58#ifdef HAVE_SYS_WAIT_H 61#ifdef HAVE_SYS_WAIT_H
@@ -96,13 +99,7 @@ extern void die (int, const char *, ...)
96void 99void
97cmd_init (void) 100cmd_init (void)
98{ 101{
99#ifndef maxfd 102 long maxfd = mp_open_max();
100 if (!maxfd && (maxfd = sysconf (_SC_OPEN_MAX)) < 0) {
101 /* possibly log or emit a warning here, since there's no
102 * guarantee that our guess at maxfd will be adequate */
103 maxfd = DEFAULT_MAXFD;
104 }
105#endif
106 103
107 /* if maxfd is unnaturally high, we force it to a lower value 104 /* if maxfd is unnaturally high, we force it to a lower value
108 * ( e.g. on SunOS, when ulimit is set to unlimited: 2147483647 this would cause 105 * ( e.g. on SunOS, when ulimit is set to unlimited: 2147483647 this would cause
@@ -158,6 +155,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
158 /* close all descriptors in _cmd_pids[] 155 /* close all descriptors in _cmd_pids[]
159 * This is executed in a separate address space (pure child), 156 * This is executed in a separate address space (pure child),
160 * so we don't have to worry about async safety */ 157 * so we don't have to worry about async safety */
158 long maxfd = mp_open_max();
161 for (i = 0; i < maxfd; i++) 159 for (i = 0; i < maxfd; i++)
162 if (_cmd_pids[i] > 0) 160 if (_cmd_pids[i] > 0)
163 close (i); 161 close (i);
@@ -184,6 +182,7 @@ _cmd_close (int fd)
184 pid_t pid; 182 pid_t pid;
185 183
186 /* make sure the provided fd was opened */ 184 /* make sure the provided fd was opened */
185 long maxfd = mp_open_max();
187 if (fd < 0 || fd > maxfd || !_cmd_pids || (pid = _cmd_pids[fd]) == 0) 186 if (fd < 0 || fd > maxfd || !_cmd_pids || (pid = _cmd_pids[fd]) == 0)
188 return -1; 187 return -1;
189 188
@@ -275,7 +274,6 @@ _cmd_fetch_output (int fd, output * op, int flags)
275int 274int
276cmd_run (const char *cmdstring, output * out, output * err, int flags) 275cmd_run (const char *cmdstring, output * out, output * err, int flags)
277{ 276{
278 int fd, pfd_out[2], pfd_err[2];
279 int i = 0, argc; 277 int i = 0, argc;
280 size_t cmdlen; 278 size_t cmdlen;
281 char **argv = NULL; 279 char **argv = NULL;
@@ -397,6 +395,7 @@ timeout_alarm_handler (int signo)
397 printf (_("%s - Plugin timed out after %d seconds\n"), 395 printf (_("%s - Plugin timed out after %d seconds\n"),
398 state_text(timeout_state), timeout_interval); 396 state_text(timeout_state), timeout_interval);
399 397
398 long maxfd = mp_open_max();
400 if(_cmd_pids) for(i = 0; i < maxfd; i++) { 399 if(_cmd_pids) for(i = 0; i < maxfd; i++) {
401 if(_cmd_pids[i] != 0) kill(_cmd_pids[i], SIGKILL); 400 if(_cmd_pids[i] != 0) kill(_cmd_pids[i], SIGKILL);
402 } 401 }