From: Jens Axboe Date: Wed, 21 Mar 2012 17:54:30 +0000 (+0100) Subject: graph: fix for unitialized graph_value nodes X-Git-Tag: gfio-0.1~73 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=3ca30e63c16734837336380b6f40b85e97579167;p=fio.git graph: fix for unitialized graph_value nodes And leaking tooltip/node on free. Signed-off-by: Jens Axboe --- diff --git a/graph.c b/graph.c index 7304b009..9761a1ad 100644 --- a/graph.c +++ b/graph.c @@ -688,6 +688,7 @@ static void graph_label_add_value(struct graph_label *i, void *value, struct graph_value *x; x = malloc(sizeof(*x)); + memset(x, 0, sizeof(*x)); x->value = value; if (tooltip) x->tooltip = strdup(tooltip); @@ -707,6 +708,7 @@ static void graph_label_add_value(struct graph_label *i, void *value, double miny = yval / TOOLTIP_DELTA; double maxy = yval * TOOLTIP_DELTA; + INIT_PRIO_TREE_NODE(&x->node); x->node.start = miny; x->node.last = maxy; if (x->node.last == x->node.start) @@ -777,13 +779,18 @@ int graph_add_xy_data(struct graph *bg, const char *label, return 0; } -static void graph_free_values(struct graph_value *values) +static void graph_free_values(struct graph_label *l, struct graph_value *values) { struct graph_value *i, *next; for (i = values; i; i = next) { next = i->next; free(i->value); + if (i->tooltip) { + free(i->tooltip); + prio_tree_remove(&l->prio_tree, &i->node); + l->tooltip_count--; + } free(i); } } @@ -794,7 +801,7 @@ static void graph_free_labels(struct graph_label *labels) for (i = labels; i; i = next) { next = i->next; - graph_free_values(i->values); + graph_free_values(i, i->values); free(i); } }