X-Git-Url: https://git.octo.it/?p=collectd.git;a=blobdiff_plain;f=src%2Fdaemon%2Futils_cache.c;h=cf2095eec12fb0190ce30e187173ea6d7490d433;hp=722fa2dac416e4d60bfa6cf64ddb130000191691;hb=8d5ac5e09dddd774c2bee26a765efa0f3eebc462;hpb=64b9342a6c0ac420f3a01096fc319ce1d1ae8746 diff --git a/src/daemon/utils_cache.c b/src/daemon/utils_cache.c index 722fa2da..cf2095ee 100644 --- a/src/daemon/utils_cache.c +++ b/src/daemon/utils_cache.c @@ -201,6 +201,10 @@ static int uc_insert(const data_set_t *ds, const value_list_t *vl, ce->interval = vl->interval; ce->state = STATE_UNKNOWN; + if (vl->meta != NULL) { + ce->meta = meta_data_clone(vl->meta); + } + if (c_avl_insert(cache_tree, key_copy, ce) != 0) { sfree(key_copy); ERROR("uc_insert: c_avl_insert failed."); @@ -275,7 +279,8 @@ int uc_check_timeout(void) { * plugin calls the cache interface. */ for (size_t i = 0; i < expired_num; i++) { value_list_t vl = { - .time = expired[i].time, .interval = expired[i].interval, + .time = expired[i].time, + .interval = expired[i].interval, }; if (parse_identifier_vl(expired[i].key, &vl) != 0) { @@ -917,13 +922,12 @@ int uc_iterator_get_values(uc_iter_t *iter, value_t **ret_values, if ((iter == NULL) || (iter->entry == NULL) || (ret_values == NULL) || (ret_num == NULL)) return -1; - *ret_values = calloc(iter->entry->values_num, sizeof(*iter->entry->values_raw)); if (*ret_values == NULL) return -1; for (size_t i = 0; i < iter->entry->values_num; ++i) - *ret_values[i] = iter->entry->values_raw[i]; + (*ret_values)[i] = iter->entry->values_raw[i]; *ret_num = iter->entry->values_num; @@ -994,11 +998,17 @@ static meta_data_t *uc_get_meta(const value_list_t *vl) /* {{{ */ pthread_mutex_unlock(&cache_lock); \ return status; \ } -int uc_meta_data_exists(const value_list_t *vl, - const char *key) UC_WRAP(meta_data_exists) +int uc_meta_data_exists(const value_list_t *vl, const char *key) + UC_WRAP(meta_data_exists) + + int uc_meta_data_delete(const value_list_t *vl, const char *key) + UC_WRAP(meta_data_delete) + + /* The second argument is called `toc` in the API, but the macro expects + * `key`. */ + int uc_meta_data_toc(const value_list_t *vl, + char ***key) UC_WRAP(meta_data_toc) - int uc_meta_data_delete(const value_list_t *vl, - const char *key) UC_WRAP(meta_data_delete) #undef UC_WRAP /* We need a new version of this macro because the following functions take