From: Ken Thomases ken@codeweavers.com
I was seeing a crash due to an assert about manipulating it on a background thread. I can't recall where I was seeing that. I think it's new in Catalina.
Signed-off-by: Chip Davis cdavis@codeweavers.com --- Chip's notes: I have also seen this on Mojave.
dlls/winemac.drv/cocoa_opengl.m | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/dlls/winemac.drv/cocoa_opengl.m b/dlls/winemac.drv/cocoa_opengl.m index 5a097a12d26..e60b0b388b8 100644 --- a/dlls/winemac.drv/cocoa_opengl.m +++ b/dlls/winemac.drv/cocoa_opengl.m @@ -79,8 +79,10 @@ - (void) resetSurfaceIfBackingSizeChanged macdrv_set_view_backing_size((macdrv_view)self.view, view_backing);
NSView* save = self.view; - [super clearDrawable]; - [super setView:save]; + OnMainThread(^{ + [super clearDrawable]; + [super setView:save]; + }); shouldClearToBlack = TRUE; } } @@ -122,7 +124,11 @@ - (void) wine_updateBackingSize:(const CGSize*)size - (void) setView:(NSView*)newView { NSView* oldView = [self view]; - [super setView:newView]; + if ([NSThread isMainThread]) + [super setView:newView]; + else OnMainThread(^{ + [super setView:newView]; + }); [newView retain]; [oldView release]; } @@ -130,7 +136,11 @@ - (void) setView:(NSView*)newView - (void) clearDrawable { NSView* oldView = [self view]; - [super clearDrawable]; + if ([NSThread isMainThread]) + [super clearDrawable]; + else OnMainThread(^{ + [super clearDrawable]; + }); [oldView release];
[self wine_updateBackingSize:NULL];