[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 5f1bd87247: Prevent GC of window referenced from EmacsScroller
From: |
Eli Zaretskii |
Subject: |
master 5f1bd87247: Prevent GC of window referenced from EmacsScroller |
Date: |
Wed, 22 Jun 2022 09:51:10 -0400 (EDT) |
branch: master
commit 5f1bd872478927ad4bc635502e74628d39885286
Author: Gerd Moellmann <gerd.moellmann@gmail.com>
Commit: Eli Zaretskii <eliz@gnu.org>
Prevent GC of window referenced from EmacsScroller
* src/nsterm.m (EmacsScroller.mark, mark_nsterm): New functions.
* src/nsterm.h (EmacsScroller.mark, mark_nsterm): Declare.
* src/alloc.c (garbage_collect) [MAVE_NS]: Call mark_nsterm.
(Bug#56095)
---
src/alloc.c | 4 ++++
src/nsterm.h | 4 ++++
src/nsterm.m | 30 ++++++++++++++++++++++++++++++
3 files changed, 38 insertions(+)
diff --git a/src/alloc.c b/src/alloc.c
index 55e18ecd77..f115a3ceba 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6204,6 +6204,10 @@ garbage_collect (void)
mark_xterm ();
#endif
+#ifdef HAVE_NS
+ mark_nsterm ();
+#endif
+
/* Everything is now marked, except for the data in font caches,
undo lists, and finalizers. The first two are compacted by
removing an items which aren't reachable otherwise. */
diff --git a/src/nsterm.h b/src/nsterm.h
index c4fdc7054f..7a097b3248 100644
--- a/src/nsterm.h
+++ b/src/nsterm.h
@@ -724,6 +724,7 @@ enum ns_return_frame_mode
int em_whole;
}
+- (void) mark;
- (instancetype) initFrame: (NSRect )r window: (Lisp_Object)win;
- (void)setFrame: (NSRect)r;
@@ -1373,4 +1374,7 @@ enum NSWindowTabbingMode
#define NSBezelStyleRounded NSRoundedBezelStyle
#define NSButtonTypeMomentaryPushIn NSMomentaryPushInButton
#endif
+
+extern void mark_nsterm (void);
+
#endif /* HAVE_NS */
diff --git a/src/nsterm.m b/src/nsterm.m
index 891d52ea3f..ae44f80845 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -9924,6 +9924,16 @@ nswindow_orderedIndex_sort (id w1, id w2, void *c)
return ret;
}
+- (void) mark
+{
+ if (window)
+ {
+ Lisp_Object win;
+ XSETWINDOW (win, window);
+ mark_object (win);
+ }
+}
+
- (void)resetCursorRects
{
@@ -10665,6 +10675,26 @@ ns_xlfd_to_fontname (const char *xlfd)
return ret;
}
+void
+mark_nsterm (void)
+{
+ NSTRACE ("mark_nsterm");
+ Lisp_Object tail, frame;
+ FOR_EACH_FRAME (tail, frame)
+ {
+ struct frame *f = XFRAME (frame);
+ if (FRAME_NS_P (f))
+ {
+ NSArray *subviews = [[FRAME_NS_VIEW (f) superview] subviews];
+ for (int i = [subviews count] - 1; i >= 0; --i)
+ {
+ id scroller = [subviews objectAtIndex: i];
+ if ([scroller isKindOfClass: [EmacsScroller class]])
+ [scroller mark];
+ }
+ }
+ }
+}
void
syms_of_nsterm (void)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 5f1bd87247: Prevent GC of window referenced from EmacsScroller,
Eli Zaretskii <=