diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2014-07-29 12:50:06 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-07-29 09:38:01 -0700 |
commit | 8c8657f9965ccebc481a741bd8d525f13ff5b8b0 (patch) | |
tree | 7bb55ccd3cae191be61f3ff0b94771ac915e8b2f /dive.c | |
parent | 1786148d31a1013d6279280d89f8acbcdbc94ef5 (diff) | |
download | subsurface-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.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -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; } } |