projects
/
rrdtool.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
* Add utility functions to allocate pointers in variable size chunks.
[rrdtool.git]
/
src
/
rrd_daemon.c
diff --git
a/src/rrd_daemon.c
b/src/rrd_daemon.c
index
b290bcc
..
9b8d9ee
100644
(file)
--- a/
src/rrd_daemon.c
+++ b/
src/rrd_daemon.c
@@
-111,7
+111,12
@@
#include <glib-2.0/glib.h>
/* }}} */
#include <glib-2.0/glib.h>
/* }}} */
-#define RRDD_LOG(severity, ...) syslog ((severity), __VA_ARGS__)
+#define RRDD_LOG(severity, ...) \
+ do { \
+ if (stay_foreground) \
+ fprintf(stderr, __VA_ARGS__); \
+ syslog ((severity), __VA_ARGS__); \
+ } while (0)
#ifndef __GNUC__
# define __attribute__(x) /**/
#ifndef __GNUC__
# define __attribute__(x) /**/
@@
-178,7
+183,8
@@
struct cache_item_s
{
char *file;
char **values;
{
char *file;
char **values;
- size_t values_num;
+ size_t values_num; /* number of valid pointers */
+ size_t values_alloc; /* number of allocated pointers */
time_t last_flush_time;
time_t last_update_stamp;
#define CI_FLAGS_IN_TREE (1<<0)
time_t last_flush_time;
time_t last_update_stamp;
#define CI_FLAGS_IN_TREE (1<<0)
@@
-255,6
+261,7
@@
static char *config_pid_file = NULL;
static char *config_base_dir = NULL;
static size_t _config_base_dir_len = 0;
static int config_write_base_only = 0;
static char *config_base_dir = NULL;
static size_t _config_base_dir_len = 0;
static int config_write_base_only = 0;
+static size_t config_alloc_chunk = 1;
static listen_socket_t **config_listen_address_list = NULL;
static size_t config_listen_address_list_len = 0;
static listen_socket_t **config_listen_address_list = NULL;
static size_t config_listen_address_list_len = 0;
@@
-642,6
+649,7
@@
static void wipe_ci_values(cache_item_t *ci, time_t when)
{
ci->values = NULL;
ci->values_num = 0;
{
ci->values = NULL;
ci->values_num = 0;
+ ci->values_alloc = 0;
ci->last_flush_time = when;
if (config_write_jitter > 0)
ci->last_flush_time = when;
if (config_write_jitter > 0)
@@
-821,9
+829,10
@@
static int flush_old_values (int max_age)
for (k = 0; k < cfd.keys_num; k++)
{
for (k = 0; k < cfd.keys_num; k++)
{
+ gboolean status = g_tree_remove(cache_tree, cfd.keys[k]);
/* should never fail, since we have held the cache_lock
* the entire time */
/* should never fail, since we have held the cache_lock
* the entire time */
- assert(
g_tree_remove(cache_tree, cfd.keys[k]) == TRUE
);
+ assert(
status == TRUE
);
}
if (cfd.keys != NULL)
}
if (cfd.keys != NULL)
@@
-1438,7
+1447,8
@@
static int handle_request_update (HANDLER_PROTO) /* {{{ */
else
ci->last_update_stamp = stamp;
else
ci->last_update_stamp = stamp;
- if (!rrd_add_strdup(&ci->values, &ci->values_num, value))
+ if (!rrd_add_strdup_chunk(&ci->values, &ci->values_num, value,
+ &ci->values_alloc, config_alloc_chunk))
{
RRDD_LOG (LOG_ERR, "handle_request_update: rrd_add_strdup failed.");
continue;
{
RRDD_LOG (LOG_ERR, "handle_request_update: rrd_add_strdup failed.");
continue;
@@
-2770,7
+2780,7
@@
static int read_options (int argc, char **argv) /* {{{ */
gid_t socket_group = (gid_t)-1;
mode_t socket_permissions = (mode_t)-1;
gid_t socket_group = (gid_t)-1;
mode_t socket_permissions = (mode_t)-1;
- while ((option = getopt(argc, argv, "gl:s:m:P:f:w:z:t:Bb:p:Fj:h?")) != -1)
+ while ((option = getopt(argc, argv, "gl:s:m:P:f:w:z:t:Bb:p:Fj:
m:
h?")) != -1)
{
switch (option)
{
{
switch (option)
{
@@
-3078,6
+3088,19
@@
static int read_options (int argc, char **argv) /* {{{ */
}
break;
}
break;
+ case 'm':
+ {
+ int temp = atoi(optarg);
+ if (temp > 0)
+ config_alloc_chunk = temp;
+ else
+ {
+ fprintf(stderr, "Invalid allocation size: %s\n", optarg);
+ status = 10;
+ }
+ }
+ break;
+
case 'h':
case '?':
printf ("RRDCacheD %s\n"
case 'h':
case '?':
printf ("RRDCacheD %s\n"
@@
-3099,13
+3122,20
@@
static int read_options (int argc, char **argv) /* {{{ */
" -g Do not fork and run in the foreground.\n"
" -j <dir> Directory in which to create the journal files.\n"
" -F Always flush all updates at shutdown\n"
" -g Do not fork and run in the foreground.\n"
" -j <dir> Directory in which to create the journal files.\n"
" -F Always flush all updates at shutdown\n"
- " -s <id|name> Make socket g+rw to named group\n"
+ " -s <id|name> Group owner of all following UNIX sockets\n"
+ " (the socket will also have read/write permissions "
+ "for that group)\n"
+ " -m <mode> File permissions (octal) of all following UNIX "
+ "sockets\n"
"\n"
"For more information and a detailed description of all options "
"please refer\n"
"to the rrdcached(1) manual page.\n",
VERSION);
"\n"
"For more information and a detailed description of all options "
"please refer\n"
"to the rrdcached(1) manual page.\n",
VERSION);
- status = -1;
+ if (option == 'h')
+ status = -1;
+ else
+ status = 1;
break;
} /* switch (option) */
} /* while (getopt) */
break;
} /* switch (option) */
} /* while (getopt) */