src/daemon/utils_time.h: Use composite literals in all macros.
[collectd.git] / src / daemon / plugin.c
index d4b962f..8b84e6a 100644 (file)
@@ -108,7 +108,7 @@ static c_avl_tree_t *data_sets;
 static char *plugindir = NULL;
 
 #ifndef DEFAULT_MAX_READ_INTERVAL
-# define DEFAULT_MAX_READ_INTERVAL TIME_T_TO_CDTIME_T (86400)
+# define DEFAULT_MAX_READ_INTERVAL TIME_T_TO_CDTIME_T_STATIC (86400)
 #endif
 static c_heap_t       *read_heap = NULL;
 static llist_t        *read_list;
@@ -360,7 +360,7 @@ static void log_list_callbacks (llist_t **list, /* {{{ */
 } /* }}} void log_list_callbacks */
 
 static int create_register_callback (llist_t **list, /* {{{ */
-               const char *name, void *callback, user_data_t *ud)
+               const char *name, void *callback, user_data_t const *ud)
 {
        callback_func_t *cf;
 
@@ -522,12 +522,8 @@ static void *plugin_read_thread (void __attribute__((unused)) *args)
                                && (cdtime () < rf->rf_next_read)
                                && rc == 0)
                {
-                       struct timespec ts = { 0 };
-
-                       CDTIME_T_TO_TIMESPEC (rf->rf_next_read, &ts);
-
                        rc = pthread_cond_timedwait (&read_cond, &read_lock,
-                               &ts);
+                               &CDTIME_T_TO_TIMESPEC (rf->rf_next_read));
                }
 
                /* Must hold `read_lock' when accessing `rf->rf_type'. */
@@ -723,6 +719,9 @@ static value_list_t *plugin_value_list_clone (value_list_t const *vl_orig) /* {{
                return (NULL);
        memcpy (vl, vl_orig, sizeof (*vl));
 
+       if (vl->host[0] == 0)
+               sstrncpy (vl->host, hostname_g, sizeof (vl->host));
+
        vl->values = calloc (vl_orig->values_len, sizeof (*vl->values));
        if (vl->values == NULL)
        {
@@ -1261,7 +1260,7 @@ int plugin_register_read (const char *name,
 int plugin_register_complex_read (const char *group, const char *name,
                plugin_read_cb callback,
                cdtime_t interval,
-               user_data_t *user_data)
+               user_data_t const *user_data)
 {
        read_func_t *rf;
        int status;
@@ -1305,7 +1304,7 @@ int plugin_register_complex_read (const char *group, const char *name,
 } /* int plugin_register_complex_read */
 
 int plugin_register_write (const char *name,
-               plugin_write_cb callback, user_data_t *ud)
+               plugin_write_cb callback, user_data_t const *ud)
 {
        return (create_register_callback (&list_write, name,
                                (void *) callback, ud));
@@ -1352,7 +1351,7 @@ static char *plugin_flush_callback_name (const char *name)
 } /* static char *plugin_flush_callback_name */
 
 int plugin_register_flush (const char *name,
-               plugin_flush_cb callback, user_data_t *ud)
+               plugin_flush_cb callback, user_data_t const *ud)
 {
        int status;
        plugin_ctx_t ctx = plugin_get_ctx ();
@@ -1389,15 +1388,15 @@ int plugin_register_flush (const char *name,
                }
                cb->timeout = ctx.flush_timeout;
 
-               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 = */ &(user_data_t) {
+                               .data = cb,
+                               .free_func = plugin_flush_timeout_callback_free,
+                       });
 
                sfree (flush_name);
                if (status != 0)
@@ -1412,7 +1411,7 @@ int plugin_register_flush (const char *name,
 } /* int plugin_register_flush */
 
 int plugin_register_missing (const char *name,
-               plugin_missing_cb callback, user_data_t *ud)
+               plugin_missing_cb callback, user_data_t const *ud)
 {
        return (create_register_callback (&list_missing, name,
                                (void *) callback, ud));
@@ -1483,14 +1482,14 @@ int plugin_register_data_set (const data_set_t *ds)
 } /* int plugin_register_data_set */
 
 int plugin_register_log (const char *name,
-               plugin_log_cb callback, user_data_t *ud)
+               plugin_log_cb callback, user_data_t const *ud)
 {
        return (create_register_callback (&list_log, name,
                                (void *) callback, ud));
 } /* int plugin_register_log */
 
 int plugin_register_notification (const char *name,
-               plugin_notification_cb callback, user_data_t *ud)
+               plugin_notification_cb callback, user_data_t const *ud)
 {
        return (create_register_callback (&list_notification, name,
                                (void *) callback, ud));
@@ -2078,15 +2077,16 @@ static int plugin_dispatch_values_internal (value_list_t *vl)
        int status;
        static c_complain_t no_write_complaint = C_COMPLAIN_INIT_STATIC;
 
-       value_t *saved_values;
-       int      saved_values_len;
-
        data_set_t *ds;
 
-       int free_meta_data = 0;
+       _Bool free_meta_data = 0;
+
+       assert (vl != NULL);
 
-       assert(vl);
-       assert(vl->plugin);
+       /* These fields are initialized by plugin_value_list_clone() if needed: */
+       assert (vl->host[0] != 0);
+       assert (vl->time != 0); /* The time is determined at _enqueue_ time. */
+       assert (vl->interval != 0);
 
        if (vl->type[0] == 0 || vl->values == NULL || vl->values_len < 1)
        {
@@ -2126,11 +2126,6 @@ static int plugin_dispatch_values_internal (value_list_t *vl)
                return (-1);
        }
 
-       /* Assured by plugin_value_list_clone(). The time is determined at
-        * _enqueue_ time. */
-       assert (vl->time != 0);
-       assert (vl->interval != 0);
-
        DEBUG ("plugin_dispatch_values: time = %.3f; interval = %.3f; "
                        "host = %s; "
                        "plugin = %s; plugin_instance = %s; "
@@ -2168,31 +2163,6 @@ static int plugin_dispatch_values_internal (value_list_t *vl)
        escape_slashes (vl->type, sizeof (vl->type));
        escape_slashes (vl->type_instance, sizeof (vl->type_instance));
 
-       /* Copy the values. This way, we can assure `targets' that they get
-        * dynamically allocated values, which they can free and replace if
-        * they like. */
-       if ((pre_cache_chain != NULL) || (post_cache_chain != NULL))
-       {
-               saved_values     = vl->values;
-               saved_values_len = vl->values_len;
-
-               vl->values = (value_t *) calloc (vl->values_len,
-                               sizeof (*vl->values));
-               if (vl->values == NULL)
-               {
-                       ERROR ("plugin_dispatch_values: calloc failed.");
-                       vl->values = saved_values;
-                       return (-1);
-               }
-               memcpy (vl->values, saved_values,
-                               vl->values_len * sizeof (*vl->values));
-       }
-       else /* if ((pre == NULL) && (post == NULL)) */
-       {
-               saved_values     = NULL;
-               saved_values_len = 0;
-       }
-
        if (pre_cache_chain != NULL)
        {
                status = fc_process_chain (ds, vl, pre_cache_chain);
@@ -2204,17 +2174,7 @@ static int plugin_dispatch_values_internal (value_list_t *vl)
                                        status, status);
                }
                else if (status == FC_TARGET_STOP)
-               {
-                       /* Restore the state of the value_list so that plugins
-                        * don't get confused.. */
-                       if (saved_values != NULL)
-                       {
-                               sfree (vl->values);
-                               vl->values     = saved_values;
-                               vl->values_len = saved_values_len;
-                       }
                        return (0);
-               }
        }
 
        /* Update the value cache */
@@ -2234,15 +2194,6 @@ static int plugin_dispatch_values_internal (value_list_t *vl)
        else
                fc_default_action (ds, vl);
 
-       /* Restore the state of the value_list so that plugins don't get
-        * confused.. */
-       if (saved_values != NULL)
-       {
-               sfree (vl->values);
-               vl->values     = saved_values;
-               vl->values_len = saved_values_len;
-       }
-
        if ((free_meta_data != 0) && (vl->meta != NULL))
        {
                meta_data_destroy (vl->meta);