X-Git-Url: https://git.verplant.org/?a=blobdiff_plain;f=src%2Fdaemon%2Fplugin.c;h=e593939545c7c832bf036db561ed9f8a389fe1ae;hb=91103db5378a036c0e4da9d512f686d9d0096ff7;hp=206c6e21f67ab87a6114e169b50c743d4e7d8699;hpb=1c67d71501212e275f92aa1c70d35be3d354a9b6;p=collectd.git diff --git a/src/daemon/plugin.c b/src/daemon/plugin.c index 206c6e21..e5939395 100644 --- a/src/daemon/plugin.c +++ b/src/daemon/plugin.c @@ -288,7 +288,7 @@ static int register_callback (llist_t **list, /* {{{ */ { ERROR ("plugin: register_callback: " "llentry_create failed."); - free (key); + sfree (key); destroy_callback (cf); return (-1); } @@ -358,9 +358,9 @@ static void log_list_callbacks (llist_t **list, /* {{{ */ *str = '\0'; strjoin(str, len, keys, n, "', '"); INFO("%s ['%s']", comment, str); - free(str); + sfree (str); } - free(keys); + sfree (keys); } /* }}} void log_list_callbacks */ static int create_register_callback (llist_t **list, /* {{{ */ @@ -368,13 +368,12 @@ static int create_register_callback (llist_t **list, /* {{{ */ { callback_func_t *cf; - cf = (callback_func_t *) malloc (sizeof (*cf)); + cf = calloc (1, sizeof (*cf)); if (cf == NULL) { - ERROR ("plugin: create_register_callback: malloc failed."); + ERROR ("plugin: create_register_callback: calloc failed."); return (-1); } - memset (cf, 0, sizeof (*cf)); cf->cf_callback = callback; if (ud == NULL) @@ -959,17 +958,17 @@ static void stop_write_threads (void) /* {{{ */ */ void plugin_set_dir (const char *dir) { - if (plugindir != NULL) - free (plugindir); + sfree (plugindir); if (dir == NULL) - plugindir = NULL; - else if ((plugindir = strdup (dir)) == NULL) { - char errbuf[1024]; - ERROR ("strdup failed: %s", - sstrerror (errno, errbuf, sizeof (errbuf))); + plugindir = NULL; + return; } + + plugindir = strdup (dir); + if (plugindir == NULL) + ERROR ("plugin_set_dir: strdup(\"%s\") failed", dir); } static _Bool plugin_is_loaded (char const *name) @@ -998,7 +997,7 @@ static int plugin_mark_loaded (char const *name) return (status); } -static void plugin_free_loaded () +static void plugin_free_loaded (void) { void *key; void *value; @@ -1244,14 +1243,13 @@ int plugin_register_read (const char *name, read_func_t *rf; int status; - rf = malloc (sizeof (*rf)); + rf = calloc (1, sizeof (*rf)); if (rf == NULL) { - ERROR ("plugin_register_read: malloc failed."); + ERROR ("plugin_register_read: calloc failed."); return (ENOMEM); } - memset (rf, 0, sizeof (read_func_t)); rf->rf_callback = (void *) callback; rf->rf_udata.data = NULL; rf->rf_udata.free_func = NULL; @@ -1278,14 +1276,13 @@ int plugin_register_complex_read (const char *group, const char *name, read_func_t *rf; int status; - rf = malloc (sizeof (*rf)); + rf = calloc (1,sizeof (*rf)); if (rf == NULL) { - ERROR ("plugin_register_complex_read: malloc failed."); + ERROR ("plugin_register_complex_read: calloc failed."); return (ENOMEM); } - memset (rf, 0, sizeof (read_func_t)); rf->rf_callback = (void *) callback; if (group != NULL) sstrncpy (rf->rf_group, group, sizeof (rf->rf_group)); @@ -1337,13 +1334,13 @@ static void plugin_flush_timeout_callback_free (void *data) if (cb == NULL) return; - sfree(cb->name); - sfree(cb); + sfree (cb->name); + sfree (cb); } /* static void plugin_flush_callback_free */ static char *plugin_flush_callback_name (const char *name) { - char *flush_prefix = "flush/"; + const char *flush_prefix = "flush/"; size_t prefix_size; char *flush_name; size_t name_size; @@ -1351,7 +1348,7 @@ static char *plugin_flush_callback_name (const char *name) prefix_size = strlen(flush_prefix); name_size = strlen(name); - flush_name = malloc (sizeof(char) * (name_size + prefix_size + 1)); + flush_name = malloc (name_size + prefix_size + 1); if (flush_name == NULL) { ERROR ("plugin_flush_callback_name: malloc failed."); @@ -1378,18 +1375,17 @@ int plugin_register_flush (const char *name, if (ctx.flush_interval != 0) { char *flush_name; - user_data_t ud; flush_callback_t *cb; flush_name = plugin_flush_callback_name (name); if (flush_name == NULL) return (-1); - cb = malloc(sizeof(flush_callback_t)); + cb = malloc(sizeof (*cb)); if (cb == NULL) { ERROR ("plugin_register_flush: malloc failed."); - sfree(flush_name); + sfree (flush_name); return (-1); } @@ -1397,27 +1393,27 @@ int plugin_register_flush (const char *name, if (cb->name == NULL) { ERROR ("plugin_register_flush: strdup failed."); - sfree(cb); - sfree(flush_name); + sfree (cb); + sfree (flush_name); return (-1); } cb->timeout = ctx.flush_timeout; - ud.data = cb; - ud.free_func = plugin_flush_timeout_callback_free; + ud->data = cb; + ud->free_func = plugin_flush_timeout_callback_free; status = plugin_register_complex_read ( /* group = */ "flush", /* name = */ flush_name, /* callback = */ plugin_flush_timeout_callback, /* interval = */ ctx.flush_interval, - /* user data = */ &ud); + /* user data = */ ud); - sfree(flush_name); + sfree (flush_name); if (status != 0) { - sfree(cb->name); - sfree(cb); + sfree (cb->name); + sfree (cb); return status; } } @@ -1478,16 +1474,16 @@ int plugin_register_data_set (const data_set_t *ds) return (-1); } - ds_copy = (data_set_t *) malloc (sizeof (data_set_t)); + ds_copy = malloc (sizeof (*ds_copy)); if (ds_copy == NULL) return (-1); memcpy(ds_copy, ds, sizeof (data_set_t)); - ds_copy->ds = (data_source_t *) malloc (sizeof (data_source_t) + ds_copy->ds = malloc (sizeof (*ds_copy->ds) * ds->ds_num); if (ds_copy->ds == NULL) { - free (ds_copy); + sfree (ds_copy); return (-1); } @@ -1651,7 +1647,7 @@ int plugin_unregister_flush (const char *name) if (flush_name != NULL) { plugin_unregister_read(flush_name); - sfree(flush_name); + sfree (flush_name); } } @@ -1697,7 +1693,6 @@ int plugin_unregister_notification (const char *name) void plugin_init_all (void) { char const *chain_name; - long write_threads_num; llentry_t *le; int status; @@ -1743,8 +1738,6 @@ void plugin_init_all (void) write_threads_num = 5; } - start_write_threads ((size_t) write_threads_num); - if ((list_init == NULL) && (read_heap == NULL)) return; @@ -1780,6 +1773,8 @@ void plugin_init_all (void) le = le->next; } + start_write_threads ((size_t) write_threads_num); + max_read_interval = global_option_get_time ("MaxReadInterval", DEFAULT_MAX_READ_INTERVAL); @@ -2215,7 +2210,7 @@ static int plugin_dispatch_values_internal (value_list_t *vl) * don't get confused.. */ if (saved_values != NULL) { - free (vl->values); + sfree (vl->values); vl->values = saved_values; vl->values_len = saved_values_len; } @@ -2244,7 +2239,7 @@ static int plugin_dispatch_values_internal (value_list_t *vl) * confused.. */ if (saved_values != NULL) { - free (vl->values); + sfree (vl->values); vl->values = saved_values; vl->values_len = saved_values_len; } @@ -2402,7 +2397,7 @@ int plugin_dispatch_multivalue (value_list_t const *template, /* {{{ */ case DS_TYPE_GAUGE: vl->values[0].gauge = va_arg (ap, gauge_t); if (store_percentage) - vl->values[0].gauge *= 100.0 / sum; + vl->values[0].gauge *= sum ? (100.0 / sum) : 0; break; case DS_TYPE_ABSOLUTE: vl->values[0].absolute = va_arg (ap, absolute_t); @@ -2580,13 +2575,12 @@ static int plugin_notification_meta_add (notification_t *n, return (-1); } - meta = (notification_meta_t *) malloc (sizeof (notification_meta_t)); + meta = calloc (1, sizeof (*meta)); if (meta == NULL) { - ERROR ("plugin_notification_meta_add: malloc failed."); + ERROR ("plugin_notification_meta_add: calloc failed."); return (-1); } - memset (meta, 0, sizeof (notification_meta_t)); sstrncpy (meta->name, name, sizeof (meta->name)); meta->type = type; @@ -2730,7 +2724,11 @@ int plugin_notification_meta_free (notification_meta_t *n) if (this->type == NM_TYPE_STRING) { - free ((char *)this->nm_value.nm_string); + /* Assign to a temporary variable to work around nm_string's const + * modifier. */ + void *tmp = (void *) this->nm_value.nm_string; + + sfree (tmp); this->nm_value.nm_string = NULL; } sfree (this); @@ -2837,7 +2835,7 @@ static void *plugin_thread_start (void *arg) plugin_set_ctx (plugin_thread->ctx); - free (plugin_thread); + sfree (plugin_thread); return start_routine (plugin_arg); } /* void *plugin_thread_start */