aboutsummaryrefslogtreecommitdiff
path: root/view.c
diff options
context:
space:
mode:
authorMateusz Okulus <mmokulus@gmail.com>2020-11-15 20:40:08 +0100
committerMarc André Tanner <mat@brain-dump.org>2020-11-20 10:43:10 +0100
commit8e1a084ac0713a84d289aecbc1141203cbaed414 (patch)
tree7e5e0e081cb27f233295034632a60d18272986fe /view.c
parent6a8e7e4de1067d73080fe0096eb97dc2118ab41e (diff)
downloadvis-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
Diffstat (limited to 'view.c')
-rw-r--r--view.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/view.c b/view.c
index d69f488..fc9c999 100644
--- a/view.c
+++ b/view.c
@@ -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);
}