diff options
| author | Mateusz Okulus <mmokulus@gmail.com> | 2020-11-15 20:40:08 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2020-11-20 10:43:10 +0100 |
| commit | 8e1a084ac0713a84d289aecbc1141203cbaed414 (patch) | |
| tree | 7e5e0e081cb27f233295034632a60d18272986fe | |
| parent | 6a8e7e4de1067d73080fe0096eb97dc2118ab41e (diff) | |
| download | vis-8e1a084ac0713a84d289aecbc1141203cbaed414.tar.gz vis-8e1a084ac0713a84d289aecbc1141203cbaed414.tar.xz | |
view: make view_selections_dispose_all O(n)
The for loop in selection_free won't run because the next element
will always be NULL, because we are freeing from the end.
Close #852
| -rw-r--r-- | view.c | 7 |
1 files changed, 5 insertions, 2 deletions
@@ -1196,8 +1196,11 @@ void view_selections_clear_all(View *view) { } void view_selections_dispose_all(View *view) { - for (Selection *s = view->selections, *next; s; s = next) { - next = s->next; + Selection *last = view->selections; + while (last->next) + last = last->next; + for (Selection *s = last, *prev; s; s = prev) { + prev = s->prev; if (s != view->selection) selection_free(s); } |
