projects
/
rrdtool.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix for the memory leak in info fixes the memory leak in "INFO".
[rrdtool.git]
/
src
/
rrd_daemon.c
diff --git
a/src/rrd_daemon.c
b/src/rrd_daemon.c
index
9062927
..
0dc8e0b
100644
(file)
--- 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;
{
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);
/* 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 ();
}
/* 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());
}
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))
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;
}
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 */
return send_response(sock, RESP_OK, "Info for %s follows\n",file);
} /* }}} static int handle_request_info */