summaryrefslogtreecommitdiffstats
path: root/dive.c
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2014-07-29 12:50:06 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-07-29 09:38:01 -0700
commit8c8657f9965ccebc481a741bd8d525f13ff5b8b0 (patch)
tree7bb55ccd3cae191be61f3ff0b94771ac915e8b2f /dive.c
parent1786148d31a1013d6279280d89f8acbcdbc94ef5 (diff)
downloadsubsurface-8c8657f9965ccebc481a741bd8d525f13ff5b8b0.tar.gz
Don't cross link events between displayed_dive and current_dive
The copy_dive assumed that the event being removed was from current_dive, wich was until a very recent past. now it can't assume that anymore, so instead of setting ev = assumed_dive->event->next, we do a ev = current_dive->event->next. Fixes #663 Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'dive.c')
-rw-r--r--dive.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/dive.c b/dive.c
index acab8ff52..139afe23e 100644
--- a/dive.c
+++ b/dive.c
@@ -70,8 +70,13 @@ void remove_event(struct event* event)
while (ep && !same_event(*ep, event))
ep = &(*ep)->next;
if (ep) {
- *ep = event->next;
- free(event);
+ /* we can't link directly with event->next
+ * because 'event' can be a copy from another
+ * dive (for instance the displayed_dive
+ * that we use on the interface to show things). */
+ struct event *temp = (*ep)->next;
+ free(*ep);
+ *ep = temp;
}
}