[rrd-developers] rrdcached use corrupting RRD files (trunk)
kevin brintnall
kbrint at rufus.net
Fri Oct 22 14:34:52 CEST 2010
Steve,
I think this fixes the memory leak in "INFO". Could you please test and
let me know. I cleaned up the loop a little too.
-kb
---
src/rrd_daemon.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c
index 9062927..0dc8e0b 100644
--- a/src/rrd_daemon.c
+++ b/src/rrd_daemon.c
@@ -1701,7 +1701,7 @@ static int handle_request_info (HANDLER_PROTO) /* {{{ */
{
char *file, file_tmp[PATH_MAX];
int status;
- rrd_info_t *data;
+ rrd_info_t *info;
/* obtain filename */
status = buffer_get_field(&buffer, &buffer_size, &file);
@@ -1714,11 +1714,11 @@ static int handle_request_info (HANDLER_PROTO) /* {{{ */
}
/* get data */
rrd_clear_error ();
- data = rrd_info_r(file);
- if(!data) {
+ info = rrd_info_r(file);
+ if(!info) {
return send_response(sock, RESP_ERR, "RRD Error: %s\n", rrd_get_error());
}
- while (data) {
+ for (rrd_info_t *data = info; data != NULL; data = data->next) {
switch (data->type) {
case RD_I_VAL:
if (isnan(data->value.u_val))
@@ -1739,8 +1739,10 @@ static int handle_request_info (HANDLER_PROTO) /* {{{ */
add_response_info(sock,"%s %d %lu\n", data->key, data->type, data->value.u_blo.size);
break;
}
- data = data->next;
}
+
+ rrd_info_free(info);
+
return send_response(sock, RESP_OK, "Info for %s follows\n",file);
} /* }}} static int handle_request_info */
--
1.7.3.1
More information about the rrd-developers
mailing list