-int plugin_dispatch_values_async (const value_list_t *vl)
-{
- dispatch_queue_t *qi;
- int i;
-
- if (vl == NULL)
- return (-EINVAL);
-
- if (dispatch_threads_num < 1)
- {
- ERROR ("plugin_dispatch_values_async: "
- "No dispatch threads have been started!");
-#ifdef ENOTCONN
- return (-ENOTCONN);
-#else
- return (-1);
-#endif
- }
-
- qi = (dispatch_queue_t *) malloc (sizeof (*qi));
- if (qi == NULL)
- {
- ERROR ("plugin_dispatch_values_async: malloc failed.");
- return (-ENOMEM);
- }
- memset (qi, 0, sizeof (*qi));
- qi->next = NULL;
-
- qi->vl = (value_list_t *) malloc (sizeof (value_list_t));
- if (qi->vl == NULL)
- {
- ERROR ("plugin_dispatch_values_async: malloc failed.");
- sfree (qi);
- return (-ENOMEM);
- }
- memcpy (qi->vl, vl, sizeof (value_list_t));
- qi->vl->values = NULL;
-
- qi->vl->values = (value_t *) calloc (qi->vl->values_len,
- sizeof (value_t));
- if (qi->vl->values == NULL)
- {
- ERROR ("plugin_dispatch_values_async: malloc failed.");
- sfree (qi->vl);
- sfree (qi);
- return (-ENOMEM);
- }
-
- for (i = 0; i < vl->values_len; i++)
- qi->vl->values[i] = vl->values[i];
-
- pthread_mutex_lock (&dispatch_lock);
-
- if (dispatch_tail == NULL)
- {
- dispatch_head = qi;
- dispatch_tail = qi;
- }
- else
- {
- dispatch_tail->next = qi;
- dispatch_tail = qi;
- }
-
- pthread_cond_signal (&dispatch_cond);
- pthread_mutex_unlock (&dispatch_lock);
-
- return (0);
-} /* int plugin_dispatch_values_async */
-