[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 1/4] ui: Fix hanging up Cocoa display on macOS 10.15 (Catalina
From: |
Peter Maydell |
Subject: |
Re: [PULL 1/4] ui: Fix hanging up Cocoa display on macOS 10.15 (Catalina) |
Date: |
Fri, 18 Oct 2019 12:54:53 +0100 |
Oops, just noticed that this patch should have been
Cc: address@hidden.
Hopefully the stable team can pick it up anyway.
thanks
-- PMM
On Fri, 18 Oct 2019 at 11:17, Gerd Hoffmann <address@hidden> wrote:
>
> From: Hikaru Nishida <address@hidden>
>
> macOS API documentation says that before applicationDidFinishLaunching
> is called, any events will not be processed. However, some events are
> fired before it is called in macOS Catalina. This causes deadlock of
> iothread_lock in handleEvent while it will be released after the
> app_started_sem is posted.
> This patch avoids processing events before the app_started_sem is
> posted to prevent this deadlock.
>
> Buglink: https://bugs.launchpad.net/qemu/+bug/1847906
> Signed-off-by: Hikaru Nishida <address@hidden>
> Message-id: address@hidden
> Signed-off-by: Gerd Hoffmann <address@hidden>
> ---
> ui/cocoa.m | 12 ++++++++++++
> 1 file changed, 12 insertions(+)
>
> diff --git a/ui/cocoa.m b/ui/cocoa.m
> index f12e21df6e10..fbb5b1b45f81 100644
> --- a/ui/cocoa.m
> +++ b/ui/cocoa.m
> @@ -134,6 +134,7 @@ NSArray * supportedImageFileTypes;
>
> static QemuSemaphore display_init_sem;
> static QemuSemaphore app_started_sem;
> +static bool allow_events;
>
> // Utility functions to run specified code block with iothread lock held
> typedef void (^CodeBlock)(void);
> @@ -729,6 +730,16 @@ QemuCocoaView *cocoaView;
>
> - (bool) handleEvent:(NSEvent *)event
> {
> + if(!allow_events) {
> + /*
> + * Just let OSX have all events that arrive before
> + * applicationDidFinishLaunching.
> + * This avoids a deadlock on the iothread lock, which
> cocoa_display_init()
> + * will not drop until after the app_started_sem is posted. (In
> theory
> + * there should not be any such events, but OSX Catalina now emits
> some.)
> + */
> + return false;
> + }
> return bool_with_iothread_lock(^{
> return [self handleEventLocked:event];
> });
> @@ -1156,6 +1167,7 @@ QemuCocoaView *cocoaView;
> - (void)applicationDidFinishLaunching: (NSNotification *) note
> {
> COCOA_DEBUG("QemuCocoaAppController: applicationDidFinishLaunching\n");
> + allow_events = true;
> /* Tell cocoa_display_init to proceed */
> qemu_sem_post(&app_started_sem);
> }
> --
> 2.18.1
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PULL 1/4] ui: Fix hanging up Cocoa display on macOS 10.15 (Catalina),
Peter Maydell <=