summaryrefslogtreecommitdiffstats
path: root/core/save-profiledata.c
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-07-06 14:41:09 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-07-06 11:23:35 -0700
commit69be1e23f231081e6bad98903c10782faf5104a7 (patch)
treebf8ca85183983f6adebd494c59c80663cb33f48c /core/save-profiledata.c
parent5e9ffe30053454ef9d058c7e7d41f55508cb66d7 (diff)
downloadsubsurface-69be1e23f231081e6bad98903c10782faf5104a7.tar.gz
Cleanup: fix memory management of the plot data
There was a global variable last_pi_entry_new, which stored the recently allocated plot data. This was freed when new plot data was generated. A very scary proposition: You can never have two plot datas at the same time! But exactly that happens when you export for example subtitles. The only reason why this didn't lead to very crazy behavior is that at least on my Linux machine, the calloc() call would just return the previously freed memory. Fix this mess by removing the global variable and freeing the data in the callers. Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'core/save-profiledata.c')
-rw-r--r--core/save-profiledata.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/core/save-profiledata.c b/core/save-profiledata.c
index 09ac76886..d999d4b49 100644
--- a/core/save-profiledata.c
+++ b/core/save-profiledata.c
@@ -191,6 +191,7 @@ static void put_st_event(struct membuffer *b, struct plot_data *entry, int offse
}
put_format(b, "\n");
}
+
static void save_profiles_buffer(struct membuffer *b, bool select_only)
{
int i;
@@ -211,6 +212,7 @@ static void save_profiles_buffer(struct membuffer *b, bool select_only)
put_format(b, "\n");
}
put_format(b, "\n");
+ free_plot_info_data(&pi);
}
}
@@ -233,6 +235,8 @@ void save_subtitles_buffer(struct membuffer *b, struct dive *dive, int offset, i
put_st_event(b, &pi.entry[i], offset, length);
}
put_format(b, "\n");
+
+ free_plot_info_data(&pi);
}
int save_profiledata(const char *filename, const bool select_only)