X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Futils_vl_lookup.c;h=226ba0ba39f44d79af6bd279fef778fddb8c41ab;hb=7747e2ad9a86c2307094cd4ca3f753e46329c7a5;hp=a0237841eb43a7aebea172bed7246cd71f0e0bea;hpb=b81104a423234c04f0eb4ace0ec5e93a363c917a;p=collectd.git diff --git a/src/utils_vl_lookup.c b/src/utils_vl_lookup.c index a0237841..226ba0ba 100644 --- a/src/utils_vl_lookup.c +++ b/src/utils_vl_lookup.c @@ -26,6 +26,7 @@ #include "collectd.h" + #include #include @@ -84,7 +85,7 @@ typedef struct user_obj_s user_obj_t; struct user_obj_s { void *user_obj; - identifier_t ident; + lookup_identifier_t ident; user_obj_t *next; }; @@ -174,7 +175,7 @@ static int lu_copy_ident_to_match_part (part_match_t *match_part, /* {{{ */ } /* }}} int lu_copy_ident_to_match_part */ static int lu_copy_ident_to_match (identifier_match_t *match, /* {{{ */ - identifier_t const *ident, unsigned int group_by) + lookup_identifier_t const *ident, unsigned int group_by) { memset (match, 0, sizeof (*match)); @@ -381,7 +382,7 @@ static by_type_entry_t *lu_search_by_type (lookup_t *obj, /* {{{ */ } by_type->wildcard_plugin_list = NULL; - by_type->by_plugin_tree = c_avl_create ((void *) strcmp); + by_type->by_plugin_tree = c_avl_create ((int (*) (const void *, const void *)) strcmp); if (by_type->by_plugin_tree == NULL) { ERROR ("utils_vl_lookup: c_avl_create failed."); @@ -495,6 +496,21 @@ static void lu_destroy_user_class_list (lookup_t *obj, /* {{{ */ obj->cb_free_class (user_class_list->entry.user_class); user_class_list->entry.user_class = NULL; +#define CLEAR_FIELD(field) do { \ + if (user_class_list->entry.match.field.is_regex) { \ + regfree (&user_class_list->entry.match.field.regex); \ + user_class_list->entry.match.field.is_regex = 0; \ + } \ +} while (0) + + CLEAR_FIELD (host); + CLEAR_FIELD (plugin); + CLEAR_FIELD (plugin_instance); + CLEAR_FIELD (type); + CLEAR_FIELD (type_instance); + +#undef CLEAR_FIELD + lu_destroy_user_obj (obj, user_class_list->entry.user_obj_list); user_class_list->entry.user_obj_list = NULL; pthread_mutex_destroy (&user_class_list->entry.lock); @@ -549,7 +565,7 @@ lookup_t *lookup_create (lookup_class_callback_t cb_user_class, /* {{{ */ return (NULL); } - obj->by_type_tree = c_avl_create ((void *) strcmp); + obj->by_type_tree = c_avl_create ((int (*) (const void *, const void *)) strcmp); if (obj->by_type_tree == NULL) { ERROR ("utils_vl_lookup: c_avl_create failed."); @@ -593,7 +609,7 @@ void lookup_destroy (lookup_t *obj) /* {{{ */ } /* }}} void lookup_destroy */ int lookup_add (lookup_t *obj, /* {{{ */ - identifier_t const *ident, unsigned int group_by, void *user_class) + lookup_identifier_t const *ident, unsigned int group_by, void *user_class) { by_type_entry_t *by_type = NULL; user_class_list_t *user_class_obj;