projects
/
collectd.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
openvpn: check return value of malloc
[collectd.git]
/
src
/
collectd.c
diff --git
a/src/collectd.c
b/src/collectd.c
index
b68aea5
..
1ccc1c0
100644
(file)
--- a/
src/collectd.c
+++ b/
src/collectd.c
@@
-40,7
+40,7
@@
* Global variables
*/
char hostname_g[DATA_MAX_NAME_LEN];
* Global variables
*/
char hostname_g[DATA_MAX_NAME_LEN];
-
int
interval_g;
+
cdtime_t
interval_g;
int timeout_g;
#if HAVE_LIBKSTAT
kstat_ctl_t *kc;
int timeout_g;
#if HAVE_LIBKSTAT
kstat_ctl_t *kc;
@@
-51,7
+51,9
@@
static int loop = 0;
static void *do_flush (void __attribute__((unused)) *arg)
{
INFO ("Flushing all data.");
static void *do_flush (void __attribute__((unused)) *arg)
{
INFO ("Flushing all data.");
- plugin_flush (NULL, -1, NULL);
+ plugin_flush (/* plugin = */ NULL,
+ /* timeout = */ 0,
+ /* ident = */ NULL);
INFO ("Finished flushing all data.");
pthread_exit (NULL);
return NULL;
INFO ("Finished flushing all data.");
pthread_exit (NULL);
return NULL;
@@
-77,6
+79,7
@@
static void sig_usr1_handler (int __attribute__((unused)) signal)
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&thread, &attr, do_flush, NULL);
pthread_attr_init (&attr);
pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED);
pthread_create (&thread, &attr, do_flush, NULL);
+ pthread_attr_destroy (&attr);
}
static int init_hostname (void)
}
static int init_hostname (void)
@@
-115,7
+118,7
@@
static int init_hostname (void)
ERROR ("Looking up \"%s\" failed. You have set the "
"\"FQDNLookup\" option, but I cannot resolve "
"my hostname to a fully qualified domain "
ERROR ("Looking up \"%s\" failed. You have set the "
"\"FQDNLookup\" option, but I cannot resolve "
"my hostname to a fully qualified domain "
- "name. Please fix
you
network "
+ "name. Please fix
the
network "
"configuration.", hostname_g);
return (-1);
}
"configuration.", hostname_g);
return (-1);
}
@@
-135,19
+138,11
@@
static int init_hostname (void)
static int init_global_variables (void)
{
static int init_global_variables (void)
{
- c
onst char
*str;
+ c
har const
*str;
- str = global_option_get ("Interval");
- if (str == NULL)
- str = "10";
- interval_g = atoi (str);
- if (interval_g <= 0)
- {
- fprintf (stderr, "Cannot set the interval to a correct value.\n"
- "Please check your settings.\n");
- return (-1);
- }
- DEBUG ("interval_g = %i;", interval_g);
+ interval_g = cf_get_default_interval ();
+ assert (interval_g > 0);
+ DEBUG ("interval_g = %.3f;", CDTIME_T_TO_DOUBLE (interval_g));
str = global_option_get ("Timeout");
if (str == NULL)
str = global_option_get ("Timeout");
if (str == NULL)
@@
-187,8
+182,10
@@
static int change_basedir (const char *orig_dir)
while ((dirlen > 0) && (dir[dirlen - 1] == '/'))
dir[--dirlen] = '\0';
while ((dirlen > 0) && (dir[dirlen - 1] == '/'))
dir[--dirlen] = '\0';
- if (dirlen <= 0)
+ if (dirlen <= 0) {
+ free (dir);
return (-1);
return (-1);
+ }
status = chdir (dir);
if (status == 0)
status = chdir (dir);
if (status == 0)
@@
-314,22
+311,15
@@
static int do_init (void)
static int do_loop (void)
{
static int do_loop (void)
{
-
struct timeval tv_now
;
-
struct timeval tv_next
;
- struct timeval tv_wait;
-
struct timespec ts_wait
;
+
cdtime_t interval = cf_get_default_interval ()
;
+
cdtime_t wait_until
;
+
+
wait_until = cdtime () + interval
;
while (loop == 0)
{
while (loop == 0)
{
- if (gettimeofday (&tv_next, NULL) < 0)
- {
- char errbuf[1024];
- ERROR ("gettimeofday failed: %s",
- sstrerror (errno, errbuf,
- sizeof (errbuf)));
- return (-1);
- }
- tv_next.tv_sec += interval_g;
+ struct timespec ts_wait = { 0, 0 };
+ cdtime_t now;
#if HAVE_LIBKSTAT
update_kstat ();
#if HAVE_LIBKSTAT
update_kstat ();
@@
-338,27
+328,20
@@
static int do_loop (void)
/* Issue all plugins */
plugin_read_all ();
/* Issue all plugins */
plugin_read_all ();
- if (gettimeofday (&tv_now, NULL) < 0)
- {
- char errbuf[1024];
- ERROR ("gettimeofday failed: %s",
- sstrerror (errno, errbuf,
- sizeof (errbuf)));
- return (-1);
- }
-
- if (timeval_cmp (tv_next, tv_now, &tv_wait) <= 0)
+ now = cdtime ();
+ if (now >= wait_until)
{
WARNING ("Not sleeping because the next interval is "
{
WARNING ("Not sleeping because the next interval is "
- "%i.%06i seconds in the past!",
- (int) tv_wait.tv_sec, (int) tv_wait.tv_usec);
+ "%.3f seconds in the past!",
+ CDTIME_T_TO_DOUBLE (now - wait_until));
+ wait_until = now + interval;
continue;
}
continue;
}
-
ts_wait.tv_sec = tv_wait.tv_sec
;
-
ts_wait.tv_nsec = (long) (1000 * tv_wait.tv_usec)
;
+
CDTIME_T_TO_TIMESPEC (wait_until - now, &ts_wait)
;
+
wait_until = wait_until + interval
;
- while ((loop == 0) && (nanosleep (&ts_wait, &ts_wait)
== -1
))
+ while ((loop == 0) && (nanosleep (&ts_wait, &ts_wait)
!= 0
))
{
if (errno != EINTR)
{
{
if (errno != EINTR)
{
@@
-371,7
+354,6
@@
static int do_loop (void)
}
} /* while (loop == 0) */
}
} /* while (loop == 0) */
- DEBUG ("return (0);");
return (0);
} /* int do_loop */
return (0);
} /* int do_loop */
@@
-404,8
+386,9
@@
static int pidfile_create (void)
static int pidfile_remove (void)
{
const char *file = global_option_get ("PIDFile");
static int pidfile_remove (void)
{
const char *file = global_option_get ("PIDFile");
+ if (file == NULL)
+ return 0;
- DEBUG ("unlink (%s)", (file != NULL) ? file : "<null>");
return (unlink (file));
} /* static int pidfile_remove (const char *file) */
#endif /* COLLECT_DAEMON */
return (unlink (file));
} /* static int pidfile_remove (const char *file) */
#endif /* COLLECT_DAEMON */
@@
-475,6
+458,8
@@
int main (int argc, char **argv)
if (optind < argc)
exit_usage (1);
if (optind < argc)
exit_usage (1);
+ plugin_init_ctx ();
+
/*
* Read options from the config file, the environment and the command
* line (in that order, with later options overwriting previous ones in
/*
* Read options from the config file, the environment and the command
* line (in that order, with later options overwriting previous ones in