X-Git-Url: https://git.octo.it/?a=blobdiff_plain;ds=sidebyside;f=src%2Futils_cache.c;h=170e2c5e41edd3c13c6deff5a7e8e42c69e6010a;hb=08f5dee4cf337eb0cac72b87c24092e4ea2089cf;hp=60d3283278e394dfd673029619cac16f7de64baf;hpb=3ad4d23b1d5f9efc2f281a1eb551465888bd4068;p=collectd.git diff --git a/src/utils_cache.c b/src/utils_cache.c index 60d32832..170e2c5e 100644 --- a/src/utils_cache.c +++ b/src/utils_cache.c @@ -296,6 +296,7 @@ int uc_check_timeout (void) { DEBUG ("uc_check_timeout: %s is missing but ``uninteresting''", keys[i]); + ce = NULL; status = c_avl_remove (cache_tree, keys[i], (void *) &key, (void *) &ce); if (status != 0) @@ -304,7 +305,8 @@ int uc_check_timeout (void) } sfree (keys[i]); sfree (key); - cache_free (ce); + if (ce != NULL) + cache_free (ce); continue; } @@ -497,16 +499,24 @@ int uc_get_rate_by_name (const char *name, gauge_t **ret_values, size_t *ret_val { assert (ce != NULL); - ret_num = ce->values_num; - ret = (gauge_t *) malloc (ret_num * sizeof (gauge_t)); - if (ret == NULL) + /* remove missing values from getval */ + if (ce->state == STATE_MISSING) { - ERROR ("utils_cache: uc_get_rate_by_name: malloc failed."); status = -1; } else { - memcpy (ret, ce->values_gauge, ret_num * sizeof (gauge_t)); + ret_num = ce->values_num; + ret = (gauge_t *) malloc (ret_num * sizeof (gauge_t)); + if (ret == NULL) + { + ERROR ("utils_cache: uc_get_rate_by_name: malloc failed."); + status = -1; + } + else + { + memcpy (ret, ce->values_gauge, ret_num * sizeof (gauge_t)); + } } } else @@ -579,6 +589,10 @@ int uc_get_names (char ***ret_names, time_t **ret_times, size_t *ret_number) { char **temp; + /* remove missing values when list values */ + if (value->state == STATE_MISSING) + continue; + if (ret_times != NULL) { time_t *tmp_times;