summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Lubomir I. Ivanov <neolit123@gmail.com>2012-12-17 02:37:44 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-12-16 16:00:09 -1000
commit33ae98c96f9e9564085fd6fc49f9a77fcf0fa331 (patch)
treebae8fefe5c64e4a7eed695c0a073e25b7df07224
parent5c65ed2390d3772bd6773464c928e58b7585ba3c (diff)
downloadsubsurface-33ae98c96f9e9564085fd6fc49f9a77fcf0fa331.tar.gz
Attempt to free plot data entries in each call to create_plot_info()
In profile.c:create_plot_info(), store the last address in which memory was allocated for the plot data entries in the static variable "last_pi_entry". If "last_pi_entry" isn't a NULL pointer in each call to create_plot_info(), free memory at that address. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--profile.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/profile.c b/profile.c
index 984c5e2c9..a1f8c6bfb 100644
--- a/profile.c
+++ b/profile.c
@@ -22,6 +22,7 @@ int selected_dive = 0;
char zoomed_plot = 0;
static double plot_scale = SCALE_SCREEN;
+static struct plot_data *last_pi_entry = NULL;
#define cairo_set_line_width_scaled(cr, w) \
cairo_set_line_width((cr), (w) * plot_scale);
@@ -1525,7 +1526,9 @@ static struct plot_info *create_plot_info(struct dive *dive, struct divecomputer
/* we want to potentially add synthetic plot_info elements for the gas changes */
nr = dc->samples + 4 + 2 * count_gas_change_events(dc);
- pi->entry = calloc(nr, sizeof(struct plot_data));
+ if (last_pi_entry)
+ free((void *)last_pi_entry);
+ last_pi_entry = pi->entry = calloc(nr, sizeof(struct plot_data));
if (!pi->entry)
return NULL;
pi->nr = nr;
@@ -1879,7 +1882,7 @@ void plot(struct graphics_context *gc, struct dive *dive, scale_mode_t scale)
if (gc->printer) {
free(pi->entry);
- pi->entry = NULL;
+ last_pi_entry = pi->entry = NULL;
pi->nr = 0;
}
}