On 7/15/22 15:47, Akihiko Odaki wrote:
  static void *call_qemu_main(void *opaque)
  {
     ...
+    [NSApp terminate:nil];
Is this thread-safe?  I think it should be something like:

- here:

    /*
     * Nothing more to do in the QEMU thread, ask the application
     * to exit.
     */
    dispatch_async(dispatch_get_main_queue(), ^{
        [NSApp terminate: nil];
    });

- in verifyQuit:

    if([alert runModal] == NSAlertSecondButtonReturn) {
        with_iothread_lock(^{
            shutdown_action = SHUTDOWN_ACTION_POWEROFF;
            qemu_system_shutdown_request(SHUTDOWN_CAUSE_HOST_UI);
        });
    }
    /* and just return void */

- applicationShouldTerminate: should be just

    if (qatomic_read(&qemu_main_terminating)) {
        return NSTerminateNow;
    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
            [self verifyQuit];
        });
    }
    return NSTerminateCancel;

- applicationWillTerminate: can be just the qemu_thread_join

Paolo

Reply via email to