[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