From: NeilBrown Date: Fri, 9 Jun 2023 03:21:27 +0000 (+1000) Subject: editor: use event:on-idle to free marks. X-Git-Url: http://git.neil.brown.name/?a=commitdiff_plain;h=12fb03dde73abfcf38a91e95c7d8f18b6fb33374;p=edlib.git editor: use event:on-idle to free marks. Delayed-free of marks now happens with event:on-idle Signed-off-by: NeilBrown --- diff --git a/core-editor.c b/core-editor.c index a0270d72..4a9ecb4d 100644 --- a/core-editor.c +++ b/core-editor.c @@ -312,7 +312,7 @@ DEF_CMD(editor_free_panes) return 1; } -DEF_CMD(editor_clean_up) +DEF_CMD(editor_free_marks) { struct ed_info *ei = ci->home->data; @@ -321,6 +321,14 @@ DEF_CMD(editor_clean_up) ei->mark_free_list = (struct mark*)m->all.next; __mark_free(m); } + + return 1; +} + +DEF_CMD(editor_clean_up) +{ + struct ed_info *ei = ci->home->data; + while (ei->store) { struct store *s = ei->store; ei->store = s->next; @@ -446,14 +454,16 @@ void editor_delayed_free(struct pane *ed safe, struct pane *p safe) void editor_delayed_mark_free(struct mark *m safe) { - struct pane *p = pane_root(m->owner); - struct ed_info *ei = p ? p->data : NULL; + struct pane *ed = pane_root(m->owner); + struct ed_info *ei = ed ? ed->data : NULL; if (!ei) { __mark_free(m); return; } ASSERT(ei->magic==ED_MAGIC); + if (!ei->mark_free_list) + call_comm("event:on-idle", ed, &editor_free_marks, 2); m->all.next = (void*)ei->mark_free_list; ei->mark_free_list = m; }