diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-10-02 12:21:13 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-10-02 12:21:13 -0400 |
commit | b8fbd42f0a7caa4cd9e2d50dd4e4b2101ac78acd (patch) | |
tree | 25be12b466304f493f3f49857f8b26a7d85f2f7a /src/alloc.c | |
parent | ba5fe8e7895a2cbfd2d666ca88c0ed96a73fbe29 (diff) | |
download | emacs-b8fbd42f0a7caa4cd9e2d50dd4e4b2101ac78acd.tar.gz |
mark_overlays: Use the normal ITREE_FOREACH
This commit basically reverts commit 5b954f8f9. The problem of nested
iterations hasn't been fixed in the mean time, but since the GC can
run arbitrary ELisp code (via `post-gc-hook`), running the GC from
within an itree iteration is already unsafe anyway :-(
* src/alloc.c (mark_overlays): Delete function.
(mark_buffer): Use ITREE_FOREACH.
Diffstat (limited to 'src/alloc.c')
-rw-r--r-- | src/alloc.c | 20 |
1 files changed, 3 insertions, 17 deletions
diff --git a/src/alloc.c b/src/alloc.c index db8f39a60e0..50968b7e121 100644 --- a/src/alloc.c +++ b/src/alloc.c @@ -6512,21 +6512,6 @@ mark_overlay (struct Lisp_Overlay *ov) mark_object (ov->plist); } -static void -mark_overlays (struct interval_tree *it, struct interval_node *in) -{ - /* `left/right` are set to NULL when the overlay is deleted, but - they use the `null` node instead when the overlay is not deleted - (i.e. is within an overlay tree). */ - eassert (in); - if (in == ITREE_NULL) - return; - - mark_object (in->data); - mark_overlays (it, in->left); - mark_overlays (it, in->right); -} - /* Mark Lisp_Objects and special pointers in BUFFER. */ static void @@ -6548,8 +6533,9 @@ mark_buffer (struct buffer *buffer) if (!BUFFER_LIVE_P (buffer)) mark_object (BVAR (buffer, undo_list)); - if (buffer->overlays) - mark_overlays (buffer->overlays, buffer->overlays->root); + struct interval_node *node; + ITREE_FOREACH (node, buffer->overlays, PTRDIFF_MIN, PTRDIFF_MAX, ASCENDING) + mark_object (node->data); /* If this is an indirect buffer, mark its base buffer. */ if (buffer->base_buffer && |