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>
This commit is contained in:
Tomaz Canabrava 2014-07-29 12:50:06 -03:00 committed by Dirk Hohndel
parent 1786148d31
commit 8c8657f996

9
dive.c
View file

@ -70,8 +70,13 @@ void remove_event(struct event* event)
while (ep && !same_event(*ep, event)) while (ep && !same_event(*ep, event))
ep = &(*ep)->next; ep = &(*ep)->next;
if (ep) { if (ep) {
*ep = event->next; /* we can't link directly with event->next
free(event); * 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;
} }
} }