From 8e1a084ac0713a84d289aecbc1141203cbaed414 Mon Sep 17 00:00:00 2001 From: Mateusz Okulus Date: Sun, 15 Nov 2020 20:40:08 +0100 Subject: 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 --- view.c | 7 +++++-- 1 file 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); } -- cgit v1.2.3