mirror of
https://github.com/monitoring-plugins/monitoring-plugins.git
synced 2026-05-28 04:35:40 -04:00
Rework maxfd/open_max to avoid unused variables
This commit is contained in:
parent
7f460dd60a
commit
7fd0e6f36d
7 changed files with 16 additions and 47 deletions
|
|
@ -7,7 +7,7 @@ noinst_LIBRARIES = libmonitoringplug.a
|
|||
AM_CPPFLAGS = -DNP_STATE_DIR_PREFIX=\"$(localstatedir)\" \
|
||||
-I$(srcdir) -I$(top_srcdir)/gl -I$(top_srcdir)/intl -I$(top_srcdir)/plugins
|
||||
|
||||
libmonitoringplug_a_SOURCES = utils_base.c utils_disk.c utils_tcp.c utils_cmd.c
|
||||
libmonitoringplug_a_SOURCES = utils_base.c utils_disk.c utils_tcp.c utils_cmd.c maxfd.c
|
||||
EXTRA_DIST = utils_base.h utils_disk.h utils_tcp.h utils_cmd.h parse_ini.h extra_opts.h
|
||||
|
||||
if USE_PARSE_INI
|
||||
|
|
|
|||
|
|
@ -43,6 +43,9 @@
|
|||
#include "utils.h"
|
||||
#include "utils_cmd.h"
|
||||
#include "utils_base.h"
|
||||
|
||||
#include "./maxfd.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
#ifdef HAVE_SYS_WAIT_H
|
||||
|
|
@ -86,13 +89,7 @@ extern void die (int, const char *, ...)
|
|||
void
|
||||
cmd_init (void)
|
||||
{
|
||||
#ifndef maxfd
|
||||
if (!maxfd && (maxfd = sysconf (_SC_OPEN_MAX)) < 0) {
|
||||
/* possibly log or emit a warning here, since there's no
|
||||
* guarantee that our guess at maxfd will be adequate */
|
||||
maxfd = DEFAULT_MAXFD;
|
||||
}
|
||||
#endif
|
||||
long maxfd = open_max();
|
||||
|
||||
/* if maxfd is unnaturally high, we force it to a lower value
|
||||
* ( e.g. on SunOS, when ulimit is set to unlimited: 2147483647 this would cause
|
||||
|
|
@ -148,6 +145,7 @@ _cmd_open (char *const *argv, int *pfd, int *pfderr)
|
|||
/* close all descriptors in _cmd_pids[]
|
||||
* This is executed in a separate address space (pure child),
|
||||
* so we don't have to worry about async safety */
|
||||
long maxfd = open_max();
|
||||
for (i = 0; i < maxfd; i++)
|
||||
if (_cmd_pids[i] > 0)
|
||||
close (i);
|
||||
|
|
@ -174,6 +172,7 @@ _cmd_close (int fd)
|
|||
pid_t pid;
|
||||
|
||||
/* make sure the provided fd was opened */
|
||||
long maxfd = open_max();
|
||||
if (fd < 0 || fd > maxfd || !_cmd_pids || (pid = _cmd_pids[fd]) == 0)
|
||||
return -1;
|
||||
|
||||
|
|
@ -265,7 +264,6 @@ _cmd_fetch_output (int fd, output * op, int flags)
|
|||
int
|
||||
cmd_run (const char *cmdstring, output * out, output * err, int flags)
|
||||
{
|
||||
int fd, pfd_out[2], pfd_err[2];
|
||||
int i = 0, argc;
|
||||
size_t cmdlen;
|
||||
char **argv = NULL;
|
||||
|
|
@ -387,6 +385,7 @@ timeout_alarm_handler (int signo)
|
|||
printf (_("%s - Plugin timed out after %d seconds\n"),
|
||||
state_text(timeout_state), timeout_interval);
|
||||
|
||||
long maxfd = open_max();
|
||||
if(_cmd_pids) for(i = 0; i < maxfd; i++) {
|
||||
if(_cmd_pids[i] != 0) kill(_cmd_pids[i], SIGKILL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -225,18 +225,4 @@ enum {
|
|||
# define __attribute__(x) /* do nothing */
|
||||
#endif
|
||||
|
||||
/* Try sysconf(_SC_OPEN_MAX) first, as it can be higher than OPEN_MAX.
|
||||
* If that fails and the macro isn't defined, we fall back to an educated
|
||||
* guess. There's no guarantee that our guess is adequate and the program
|
||||
* will die with SIGSEGV if it isn't and the upper boundary is breached. */
|
||||
#define DEFAULT_MAXFD 256 /* fallback value if no max open files value is set */
|
||||
#define MAXFD_LIMIT 8192 /* upper limit of open files */
|
||||
#ifdef _SC_OPEN_MAX
|
||||
static long maxfd = 0;
|
||||
#elif defined(OPEN_MAX)
|
||||
# define maxfd OPEN_MAX
|
||||
#else /* sysconf macro unavailable, so guess (may be wildly inaccurate) */
|
||||
# define maxfd DEFAULT_MAXFD
|
||||
#endif
|
||||
|
||||
#endif /* _COMMON_H_ */
|
||||
|
|
|
|||
|
|
@ -38,8 +38,9 @@
|
|||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include "common.h"
|
||||
#include "utils.h"
|
||||
#include "./common.h"
|
||||
#include "./utils.h"
|
||||
#include "../lib/maxfd.h"
|
||||
|
||||
/* extern so plugin has pid to kill exec'd process on timeouts */
|
||||
extern pid_t *childpid;
|
||||
|
|
@ -177,8 +178,7 @@ spopen (const char *cmdstring)
|
|||
}
|
||||
argv[i] = NULL;
|
||||
|
||||
if(maxfd == 0)
|
||||
maxfd = open_max();
|
||||
long maxfd = open_max();
|
||||
|
||||
if (childpid == NULL) { /* first time through */
|
||||
if ((childpid = calloc ((size_t)maxfd, sizeof (pid_t))) == NULL)
|
||||
|
|
|
|||
|
|
@ -88,8 +88,7 @@ extern void die (int, const char *, ...)
|
|||
* through this api and thus achieve async-safeness throughout the api */
|
||||
void np_runcmd_init(void)
|
||||
{
|
||||
if(maxfd == 0)
|
||||
maxfd = open_max();
|
||||
long maxfd = open_max();
|
||||
if(!np_pids) np_pids = calloc(maxfd, sizeof(pid_t));
|
||||
}
|
||||
|
||||
|
|
@ -192,6 +191,7 @@ np_runcmd_open(const char *cmdstring, int *pfd, int *pfderr)
|
|||
/* close all descriptors in np_pids[]
|
||||
* This is executed in a separate address space (pure child),
|
||||
* so we don't have to worry about async safety */
|
||||
long maxfd = open_max();
|
||||
for (i = 0; i < maxfd; i++)
|
||||
if(np_pids[i] > 0)
|
||||
close (i);
|
||||
|
|
@ -219,6 +219,7 @@ np_runcmd_close(int fd)
|
|||
pid_t pid;
|
||||
|
||||
/* make sure this fd was opened by popen() */
|
||||
long maxfd = open_max();
|
||||
if(fd < 0 || fd > maxfd || !np_pids || (pid = np_pids[fd]) == 0)
|
||||
return -1;
|
||||
|
||||
|
|
@ -242,6 +243,7 @@ runcmd_timeout_alarm_handler (int signo)
|
|||
if (signo == SIGALRM)
|
||||
puts(_("CRITICAL - Plugin timed out while executing system call"));
|
||||
|
||||
long maxfd = open_max();
|
||||
if(np_pids) for(i = 0; i < maxfd; i++) {
|
||||
if(np_pids[i] != 0) kill(np_pids[i], SIGKILL);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -804,19 +804,3 @@ char *sperfdata_int (const char *label,
|
|||
|
||||
return data;
|
||||
}
|
||||
|
||||
int
|
||||
open_max (void)
|
||||
{
|
||||
errno = 0;
|
||||
if (maxfd > 0)
|
||||
return(maxfd);
|
||||
|
||||
if ((maxfd = sysconf (_SC_OPEN_MAX)) < 0) {
|
||||
if (errno == 0)
|
||||
maxfd = DEFAULT_MAXFD; /* it's indeterminate */
|
||||
else
|
||||
die (STATE_UNKNOWN, _("sysconf error for _SC_OPEN_MAX\n"));
|
||||
}
|
||||
return(maxfd);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,8 +106,6 @@ char *sperfdata (const char *, double, const char *, char *, char *,
|
|||
char *sperfdata_int (const char *, int, const char *, char *, char *,
|
||||
int, int, int, int);
|
||||
|
||||
int open_max (void);
|
||||
|
||||
/* The idea here is that, although not every plugin will use all of these,
|
||||
most will or should. Therefore, for consistency, these very common
|
||||
options should have only these meanings throughout the overall suite */
|
||||
|
|
|
|||
Loading…
Reference in a new issue