assert(sock != NULL);
- new_buf = realloc(sock->wbuf, sock->wbuf_len + len + 1);
+ new_buf = rrd_realloc(sock->wbuf, sock->wbuf_len + len + 1);
if (new_buf == NULL)
{
RRDD_LOG(LOG_ERR, "add_to_wbuf: realloc failed");
ci->next = ci->prev = NULL;
ci->flags &= ~CI_FLAGS_IN_QUEUE;
+
+ pthread_mutex_lock (&stats_lock);
+ assert (stats_queue_length > 0);
+ stats_queue_length--;
+ pthread_mutex_unlock (&stats_lock);
+
} /* }}} static void remove_from_queue */
/* free the resources associated with the cache_item_t
{
char **temp;
- temp = (char **) realloc (cfd->keys,
+ temp = (char **) rrd_realloc (cfd->keys,
sizeof (char *) * (cfd->keys_num + 1));
if (temp == NULL)
{
wipe_ci_values(ci, time(NULL));
remove_from_queue(ci);
- pthread_mutex_lock (&stats_lock);
- assert (stats_queue_length > 0);
- stats_queue_length--;
- pthread_mutex_unlock (&stats_lock);
-
pthread_mutex_unlock (&cache_lock);
rrd_clear_error ();
"FLUSHALL\n"
"PENDING <filename>\n"
"FORGET <filename>\n"
+ "QUEUE\n"
"UPDATE <filename> <values> [<values> ...]\n"
"BATCH\n"
"STATS\n"
+ "QUIT\n"
};
char *help_flush[2] =
"Any pending updates for the file will be lost.\n"
};
+ char *help_queue[2] =
+ {
+ "Help for QUEUE\n"
+ ,
+ "Shows all files in the output queue.\n"
+ "The output is zero or more lines in the following format:\n"
+ "(where <num_vals> is the number of values to be written)\n"
+ "\n"
+ "<num_vals> <filename>\n"
+ "\n"
+ };
+
char *help_update[2] =
{
"Help for UPDATE\n"
"For more information, consult the rrdcached(1) documentation.\n"
};
+ char *help_quit[2] =
+ {
+ "Help for QUIT\n"
+ ,
+ "Disconnect from rrdcached.\n"
+ };
+
status = buffer_get_field (&buffer, &buffer_size, &command);
if (status != 0)
help_text = help_help;
help_text = help_pending;
else if (strcasecmp (command, "forget") == 0)
help_text = help_forget;
+ else if (strcasecmp (command, "queue") == 0)
+ help_text = help_queue;
else if (strcasecmp (command, "stats") == 0)
help_text = help_stats;
else if (strcasecmp (command, "batch") == 0)
help_text = help_batch;
+ else if (strcasecmp (command, "quit") == 0)
+ help_text = help_quit;
else
help_text = help_help;
}
assert(1==0);
} /* }}} static int handle_request_forget */
+static int handle_request_queue (listen_socket_t *sock) /* {{{ */
+{
+ cache_item_t *ci;
+
+ pthread_mutex_lock(&cache_lock);
+
+ ci = cache_queue_head;
+ while (ci != NULL)
+ {
+ add_response_info(sock, "%d %s\n", ci->values_num, ci->file);
+ ci = ci->next;
+ }
+
+ pthread_mutex_unlock(&cache_lock);
+
+ return send_response(sock, RESP_OK, "in queue.\n");
+} /* }}} int handle_request_queue */
+
static int handle_request_update (listen_socket_t *sock, /* {{{ */
time_t now,
char *buffer, size_t buffer_size)
else
ci->last_update_stamp = stamp;
- temp = (char **) realloc (ci->values,
+ temp = (char **) rrd_realloc (ci->values,
sizeof (char *) * (ci->values_num + 1));
if (temp == NULL)
{
return (handle_request_pending(sock, buffer_ptr, buffer_size));
else if (strcasecmp (command, "forget") == 0)
return (handle_request_forget(sock, buffer_ptr, buffer_size));
+ else if (strcasecmp (command, "queue") == 0)
+ return (handle_request_queue(sock));
else if (strcasecmp (command, "stats") == 0)
return (handle_request_stats (sock));
else if (strcasecmp (command, "help") == 0)
return batch_start(sock);
else if (strcasecmp (command, ".") == 0 && sock != NULL && sock->batch_start)
return batch_done(sock);
+ else if (strcasecmp (command, "quit") == 0)
+ return -1;
else
return send_response(sock, RESP_ERR, "Unknown command: %s\n", command);
if (file == NULL) return 0;
{
- char *reason;
+ char *reason = "unknown error";
int status = 0;
struct stat statbuf;
{
pthread_t *temp;
- temp = (pthread_t *) realloc (connection_threads,
+ temp = (pthread_t *) rrd_realloc (connection_threads,
sizeof (pthread_t) * (connection_threads_num + 1));
if (temp == NULL)
{
connection_threads_num--;
- temp = realloc(connection_threads,
+ temp = rrd_realloc(connection_threads,
sizeof(*connection_threads) * connection_threads_num);
if (connection_threads_num > 0 && temp == NULL)
RRDD_LOG(LOG_ERR, "connection_thread_main: realloc(--) failed.");
if (strncmp(path, "unix:", strlen("unix:")) == 0)
path += strlen("unix:");
- temp = (listen_socket_t *) realloc (listen_fds,
+ temp = (listen_socket_t *) rrd_realloc (listen_fds,
sizeof (listen_fds[0]) * (listen_fds_num + 1));
if (temp == NULL)
{
listen_socket_t *temp;
int one = 1;
- temp = (listen_socket_t *) realloc (listen_fds,
+ temp = (listen_socket_t *) rrd_realloc (listen_fds,
sizeof (listen_fds[0]) * (listen_fds_num + 1));
if (temp == NULL)
{
}
memset(new, 0, sizeof(listen_socket_t));
- temp = (listen_socket_t **) realloc (config_listen_address_list,
+ temp = (listen_socket_t **) rrd_realloc (config_listen_address_list,
sizeof (listen_socket_t *) * (config_listen_address_list_len + 1));
if (temp == NULL)
{