/**
* collectd - src/gmond.c
- * Copyright (C) 2009,2010 Florian octo Forster
+ * Copyright (C) 2009-2015 Florian octo Forster
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
return (se);
} /* }}} staging_entry_t *staging_entry_get */
-static int staging_entry_submit (const char *host, const char *name, /* {{{ */
- staging_entry_t *se)
-{
- value_list_t vl;
- value_t values[se->vl.values_len];
-
- if (se->vl.interval == 0)
- {
- /* No meta data has been received for this metric yet. */
- se->flags = 0;
- pthread_mutex_unlock (&staging_lock);
- request_meta_data (host, name);
- return (0);
- }
-
- se->flags = 0;
-
- memcpy (values, se->vl.values, sizeof (values));
- memcpy (&vl, &se->vl, sizeof (vl));
-
- /* Unlock before calling `plugin_dispatch_values'.. */
- pthread_mutex_unlock (&staging_lock);
-
- vl.values = values;
-
- plugin_dispatch_values (&vl);
-
- return (0);
-} /* }}} int staging_entry_submit */
-
static int staging_entry_update (const char *host, const char *name, /* {{{ */
const char *type, const char *type_instance,
int ds_index, int ds_type, value_t value)
se->flags |= (0x01 << ds_index);
- /* Check if all values have been set and submit if so. */
- if (se->flags == ((0x01 << se->vl.values_len) - 1))
+ /* Check if all data sources have been set. If not, return here. */
+ if (se->flags != ((0x01 << se->vl.values_len) - 1))
{
- /* `staging_lock' is unlocked in `staging_entry_submit'. */
- staging_entry_submit (host, name, se);
+ pthread_mutex_unlock (&staging_lock);
+ return (0);
}
- else
+
+ /* Check if the interval of this metric is known. If not, request meta data
+ * and return. */
+ if (se->vl.interval == 0)
{
+ /* No meta data has been received for this metric yet. */
+ se->flags = 0;
pthread_mutex_unlock (&staging_lock);
+
+ request_meta_data (host, name);
+ return (0);
}
+ plugin_dispatch_values (&se->vl);
+
+ se->flags = 0;
+ pthread_mutex_unlock (&staging_lock);
+
return (0);
} /* }}} int staging_entry_update */