summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--divelist.c5
-rw-r--r--gtk-gui.c10
2 files changed, 13 insertions, 2 deletions
diff --git a/divelist.c b/divelist.c
index 9bdee1571..e09eca5f9 100644
--- a/divelist.c
+++ b/divelist.c
@@ -1023,6 +1023,9 @@ void insert_trip(dive_trip_t **dive_trip_p)
static inline void delete_trip(GList *trip)
{
+ dive_trip_t *dive_trip = (dive_trip_t *)g_list_nth_data(trip, 0);
+ if (dive_trip->location)
+ free(dive_trip->location);
dive_trip_list = g_list_delete_link(dive_trip_list, trip);
#ifdef DEBUG_TRIP
dump_trip_list();
@@ -1169,7 +1172,7 @@ static void fill_dive_list(void)
if (dive_trip->when > dive->when)
dive_trip->when = dive->when;
if (!dive_trip->location && dive->location)
- dive_trip->location = dive->location;
+ dive_trip->location = strdup(dive->location);
if (dive_trip != last_trip) {
last_trip = dive_trip;
/* create trip entry */
diff --git a/gtk-gui.c b/gtk-gui.c
index 5a680c776..997694240 100644
--- a/gtk-gui.c
+++ b/gtk-gui.c
@@ -251,6 +251,14 @@ static gboolean ask_save_changes()
return quit;
}
+static void dive_trip_unref(gpointer data, gpointer user_data)
+{
+ dive_trip_t *dive_trip = (dive_trip_t *)data;
+ if (dive_trip->location)
+ free(dive_trip->location);
+ free(data);
+}
+
static void file_close(GtkWidget *w, gpointer data)
{
int i;
@@ -271,7 +279,7 @@ static void file_close(GtkWidget *w, gpointer data)
mark_divelist_changed(FALSE);
/* inlined version of g_list_free_full(dive_trip_list, free); */
- g_list_foreach(dive_trip_list, (GFunc)free, NULL);
+ g_list_foreach(dive_trip_list, (GFunc)dive_trip_unref, NULL);
g_list_free(dive_trip_list);
dive_trip_list = NULL;