if (root == NULL)
{
ERROR ("configfile: malloc failed.");
+ closedir (dh);
return (NULL);
}
memset (root, 0, sizeof (oconfig_item_t));
ERROR ("configfile: Not including `%s/%s' because its"
" name is too long.",
dir, de->d_name);
+ closedir (dh);
for (i = 0; i < filenames_num; ++i)
free (filenames[i]);
free (filenames);
filenames_num * sizeof (*filenames));
if (tmp == NULL) {
ERROR ("configfile: realloc failed.");
+ closedir (dh);
for (i = 0; i < filenames_num - 1; ++i)
free (filenames[i]);
free (filenames);
}
if (filenames == NULL)
+ {
+ closedir (dh);
return (root);
+ }
qsort ((void *) filenames, filenames_num, sizeof (*filenames),
cf_compare_string);
free (name);
}
+ closedir (dh);
free(filenames);
return (root);
} /* oconfig_item_t *cf_read_dir */
-/*
+/*
* cf_read_generic
*
* Path is stat'ed and either cf_read_file or cf_read_dir is called
{
unsigned long long blocksize;
char disk_name[256];
+ cu_mount_t *dup_ptr;
uint64_t blk_free;
uint64_t blk_reserved;
uint64_t blk_used;
if (ignorelist_match (il_fstype, mnt_ptr->type))
continue;
+ /* search for duplicates *in front of* the current mnt_ptr. */
+ for (dup_ptr = mnt_list; dup_ptr != NULL; dup_ptr = dup_ptr->next)
+ {
+ /* No duplicate found: mnt_ptr is the first of its kind. */
+ if (dup_ptr == mnt_ptr)
+ {
+ dup_ptr = NULL;
+ break;
+ }
+
+ /* Duplicate found: leave non-NULL dup_ptr. */
+ if (by_device && (strcmp (mnt_ptr->spec_device, dup_ptr->spec_device) == 0))
+ break;
+ else if (!by_device && (strcmp (mnt_ptr->dir, dup_ptr->dir) == 0))
+ break;
+ }
+
+ /* ignore duplicates */
+ if (dup_ptr != NULL)
+ continue;
+
if (STATANYFS (mnt_ptr->dir, &statbuf) < 0)
{
char errbuf[1024];
for (i = 0; i < 10; i++)
{
- device[strlen(device)-1] = i + '0';
+ device[strlen(device)-1] = i + '0';
- if ((fd = open(device, O_RDWR | O_NOCTTY)) > 0)
+ if ((fd = open(device, O_RDWR | O_NOCTTY)) != -1)
{
struct termios tios;
int rts = TIOCM_RTS;
tcflush(fd, TCIFLUSH);
tcsetattr(fd, TCSANOW, &tios);
ioctl(fd, TIOCMBIC, &rts);
-
+
if (multimeter_read_value (&value) < -1)
{
close (fd);
values = ST (/* stack index = */ 0);
+ if (NULL == values)
+ XSRETURN_EMPTY;
+
/* Make sure the argument is a hash reference. */
if (! (SvROK (values) && (SVt_PVHV == SvTYPE (SvRV (values))))) {
log_err ("Collectd::plugin_dispatch_values: Invalid values.");
XSRETURN_EMPTY;
}
- if (NULL == values)
- XSRETURN_EMPTY;
-
ret = pplugin_dispatch_values (aTHX_ (HV *)SvRV (values));
if (0 == ret)
char errbuf[1024];
ERROR ("pinba plugin: bind(2) failed: %s",
sstrerror (errno, errbuf, sizeof (errbuf)));
+ close (fd);
return (0);
}
data = udb_query_get_user_data (q);
if (NULL == data) {
- data = (c_psql_user_data_t *) smalloc (sizeof (*data));
+ data = (c_psql_user_data_t *) malloc (sizeof (*data));
if (NULL == data) {
log_err ("Out of memory.");
return -1;
res = (tbl_result_t *)realloc (tbl->results,
(tbl->results_num + 1) * sizeof (*tbl->results));
- if (NULL == tbl) {
+ if (res == NULL) {
char errbuf[1024];
log_err ("realloc failed: %s.",
sstrerror (errno, errbuf, sizeof (errbuf)));
WARNING ("teamspeak2 plugin: connect failed: %s",
sstrerror (errno, errbuf, sizeof (errbuf)));
close (sd);
+ sd = -1;
continue;
}
{ /* {{{ */
int i;
int status = 0;
+ int old_size = c_avl_size (threshold_tree);
threshold_t th;
break;
}
- if (c_avl_size (threshold_tree) > 0) {
+ /* register callbacks if this is the first time we see a valid config */
+ if ((old_size == 0) && (c_avl_size (threshold_tree) > 0))
+ {
plugin_register_missing ("threshold", ut_missing,
/* user data = */ NULL);
plugin_register_write ("threshold", ut_check_threshold,
c_avl_tree_t *tree;
};
-/*
+/*
* Private functions
*/
static void fbh_free_tree (c_avl_tree_t *tree) /* {{{ */
return (status);
} /* }}} int fbh_check_file */
-/*
+/*
* Public functions
*/
fbhash_t *fbh_create (const char *file) /* {{{ */
if (status != 0)
{
fbh_destroy (h);
+ free (h);
return (NULL);
}
value_t value = { .derive = counter };
submit_one (inst, "vmpage_action", "refill", value);
}
+ else if (strncmp ("pgsteal_kswapd_", key, strlen ("pgsteal_kswapd_")) == 0)
+ {
+ char *inst = key + strlen ("pgsteal_kswapd_");
+ value_t value = { .derive = counter };
+ submit_one (inst, "vmpage_action", "steal_kswapd", value);
+ }
+ else if (strncmp ("pgsteal_direct_", key, strlen ("pgsteal_direct_")) == 0)
+ {
+ char *inst = key + strlen ("pgsteal_direct_");
+ value_t value = { .derive = counter };
+ submit_one (inst, "vmpage_action", "steal_direct", value);
+ }
+ /* For backwards compatibility (somewhen before 4.2.3) */
else if (strncmp ("pgsteal_", key, strlen ("pgsteal_")) == 0)
{
char *inst = key + strlen ("pgsteal_");