From 08e394f681be21fd4c8a2c12bd9d1ca0a3425b55 Mon Sep 17 00:00:00 2001 From: Robin Gareus Date: Fri, 19 Apr 2024 15:38:12 +0200 Subject: [PATCH] (YDK) possible fix for Catalina event loop crashes ``` Thread 0 Crashed:: Dispatch queue: com.apple.main-thread 0 libydk.dylib 0x0000000110d8942d -[GdkQuartzView setNeedsDisplay:] + 93 1 com.apple.AppKit 0x00007fff34af6848 -[NSView(NSViewContentStyle) _recursivelyInvalidateCachedContentStyle] + 120 2 com.apple.AppKit 0x00007fff34af60fb -[NSView _setSuperview:] + 521 3 com.apple.AppKit 0x00007fff34b200a6 -[NSView removeFromSuperview] + 140 4 com.apple.AppKit 0x00007fff34ba882f -[NSView removeFromSuperviewWithoutNeedingDisplay] + 36 5 com.apple.AppKit 0x00007fff34b27168 -[NSView _finalize] + 977 6 com.apple.AppKit 0x00007fff34b26c0c -[NSView dealloc] + 121 7 com.apple.AppKit 0x00007fff34e30db4 -[NSFrameView dealloc] + 119 8 com.apple.AppKit 0x00007fff34e30d36 -[NSTitledFrame dealloc] + 62 9 com.apple.AppKit 0x00007fff34e30ce9 -[NSThemeFrame dealloc] + 603 10 com.apple.Foundation 0x00007fff39ed5992 NSKVODeallocate + 172 11 com.apple.AppKit 0x00007fff34d85884 -[NSWindow dealloc] + 1083 12 com.apple.AppKit 0x00007fff34d85442 -[NSWindow _dealloc] + 76 13 libobjc.A.dylib 0x00007fff6f6f3054 AutoreleasePoolPage::releaseUntil(objc_object**) + 134 14 libobjc.A.dylib 0x00007fff6f6d7dba objc_autoreleasePoolPop + 175 15 com.apple.CoreFoundation 0x00007fff377c9cb5 _CFAutoreleasePoolPop + 22 16 com.apple.Foundation 0x00007fff39e7d04e -[NSAutoreleasePool drain] + 126 17 libydk.dylib 0x0000000110d8ef29 gdk_event_prepare + 73 18 libglib-2.0.0.dylib 0x00000001110ded45 g_main_context_prepare + 533 19 libglib-2.0.0.dylib 0x00000001110df800 g_main_context_iterate + 128 20 libglib-2.0.0.dylib 0x00000001110dfcc2 g_main_loop_run + 210 21 libytk.dylib 0x0000000110a4f11f gtk_main + 191 22 libgtkmm2ext.dylib 0x00000001104cef1e Gtkmm2ext::UI::run(Receiver&) + 318 23 com.harrisonconsoles.Mixbus10 0x000000010dc6fb9c main + 2652 ``` --- libs/tk/ydk/quartz/GdkQuartzView.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/libs/tk/ydk/quartz/GdkQuartzView.c b/libs/tk/ydk/quartz/GdkQuartzView.c index 722537dddc..24bc6ff7ce 100644 --- a/libs/tk/ydk/quartz/GdkQuartzView.c +++ b/libs/tk/ydk/quartz/GdkQuartzView.c @@ -604,14 +604,21 @@ - (void) setNeedsDisplay:(BOOL)yn { - GdkWindowObject *private; - GdkWindowImplQuartz *impl; + if (GDK_WINDOW_DESTROYED (gdk_window)) { + return; + } + + GdkWindowObject* private = GDK_WINDOW_OBJECT (gdk_window); + GdkWindowImplQuartz* impl = GDK_WINDOW_IMPL_QUARTZ (private->impl); + + if (!impl) { + [super setNeedsDisplay:yn]; + return; + } + NSRect nsrect = [self bounds]; GdkRectangle r = { nsrect.origin.x, nsrect.origin.y, nsrect.size.width, nsrect.size.height }; - private = GDK_WINDOW_OBJECT (gdk_window); - impl = GDK_WINDOW_IMPL_QUARTZ (private->impl); - GDK_NOTE (EVENTS, g_print ("setNeedsDisplay, current NDR %p\n", impl->needs_display_region)); if (!impl->needs_display_region) @@ -650,6 +657,10 @@ private = GDK_WINDOW_OBJECT (gdk_window); impl = GDK_WINDOW_IMPL_QUARTZ (private->impl); + if (!impl) { + return; + } + GDK_NOTE (EVENTS, g_print ("setNeedsDisplayInRect, current NDR %p\n", impl->needs_display_region)); if (!impl->needs_display_region)