/*
* Now for some includes..
*/
-#include "rrd.h" /* {{{ */
+/* {{{ */
+#if defined(_WIN32) && !defined(__CYGWIN__) && !defined(__CYGWIN32__) && !defined(HAVE_CONFIG_H)
+#include "../win32/config.h"
+#else
+#ifdef HAVE_CONFIG_H
+#include "../rrd_config.h"
+#endif
+#endif
+
+#include "rrd.h"
#include "rrd_client.h"
#include <stdlib.h>
static void remove_from_queue(cache_item_t *ci) /* {{{ */
{
if (ci == NULL) return;
+ if ((ci->flags & CI_FLAGS_IN_QUEUE) == 0) return; /* not queued */
if (ci->prev == NULL)
cache_queue_head = ci->next; /* reset head */
if (cache_queue_head == ci)
return 0;
- /* remove from the double linked list */
- if (ci->flags & CI_FLAGS_IN_QUEUE)
- remove_from_queue(ci);
+ /* remove if further down in queue */
+ remove_from_queue(ci);
ci->prev = NULL;
ci->next = cache_queue_head;
ci = (cache_item_t *) value;
cfd = (callback_flush_data_t *) data;
+ if (ci->flags & CI_FLAGS_IN_QUEUE)
+ return FALSE;
+
if ((ci->last_flush_time <= cfd->abs_timeout)
- && ((ci->flags & CI_FLAGS_IN_QUEUE) == 0)
&& (ci->values_num > 0))
{
enqueue_cache_item (ci, TAIL);
}
else if ((do_shutdown != 0)
- && ((ci->flags & CI_FLAGS_IN_QUEUE) == 0)
&& (ci->values_num > 0))
{
enqueue_cache_item (ci, TAIL);
}
else if (((cfd->now - ci->last_flush_time) >= config_flush_interval)
- && ((ci->flags & CI_FLAGS_IN_QUEUE) == 0)
&& (ci->values_num <= 0))
{
char **temp;
{
char *file, file_tmp[PATH_MAX];
int values_num = 0;
- int bad_timestamps = 0;
int status;
char orig_buf[CMD_MAX];
wipe_ci_values(ci, now);
ci->flags = CI_FLAGS_IN_TREE;
+ pthread_cond_init(&ci->flushed, NULL);
pthread_mutex_lock(&cache_lock);
g_tree_insert (cache_tree, (void *) ci->file, (void *) ci);
stamp = strtol(value, &eostamp, 10);
if (eostamp == value || eostamp == NULL || *eostamp != ':')
{
- ++bad_timestamps;
- add_response_info(sock, "Cannot find timestamp in '%s'!\n", value);
- continue;
+ pthread_mutex_unlock(&cache_lock);
+ return send_response(sock, RESP_ERR,
+ "Cannot find timestamp in '%s'!\n", value);
}
else if (stamp <= ci->last_update_stamp)
{
- ++bad_timestamps;
- add_response_info(sock,
- "illegal attempt to update using time %ld when"
- " last update time is %ld (minimum one second step)\n",
- stamp, ci->last_update_stamp);
- continue;
+ pthread_mutex_unlock(&cache_lock);
+ return send_response(sock, RESP_ERR,
+ "illegal attempt to update using time %ld when last"
+ " update time is %ld (minimum one second step)\n",
+ stamp, ci->last_update_stamp);
}
else
ci->last_update_stamp = stamp;
pthread_mutex_unlock (&cache_lock);
if (values_num < 1)
- {
- /* journal replay mode */
- if (sock == NULL) return RESP_ERR;
-
- /* if we had only one update attempt, then return the full
- error message... try to get the most information out
- of the limited error space allowed by the protocol
- */
- if (bad_timestamps == 1)
- return send_response(sock, RESP_ERR, "%s", sock->wbuf);
- else
- return send_response(sock, RESP_ERR,
- "No values updated (%d bad timestamps).\n",
- bad_timestamps);
- }
+ return send_response(sock, RESP_ERR, "No values updated.\n");
else
return send_response(sock, RESP_OK,
"errors, enqueued %i value(s).\n", values_num);