qemu/ui
Peter Maydell 8d65dee2c4 ui/cocoa.m: Fix updateUIInfo threading issues
The updateUIInfo method makes Cocoa API calls.  It also calls back
into QEMU functions like dpy_set_ui_info().  To do this safely, we
need to follow two rules:
 * Cocoa API calls are made on the Cocoa UI thread
 * When calling back into QEMU we must hold the iothread lock

Fix the places where we got this wrong, by taking the iothread lock
while executing updateUIInfo, and moving the call in cocoa_switch()
inside the dispatch_async block.

Some of the Cocoa UI methods which call updateUIInfo are invoked as
part of the initial application startup, while we're still doing the
little cross-thread dance described in the comment just above
call_qemu_main().  This meant they were calling back into the QEMU UI
layer before we'd actually finished initializing our display and
registered the DisplayChangeListener, which isn't really valid.  Once
updateUIInfo takes the iothread lock, we no longer get away with
this, because during this startup phase the iothread lock is held by
the QEMU main-loop thread which is waiting for us to finish our
display initialization.  So we must suppress updateUIInfo until
applicationDidFinishLaunching allows the QEMU main-loop thread to
continue.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Tested-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Message-id: 20220224101330.967429-2-peter.maydell@linaro.org
2022-03-02 19:27:37 +00:00
..
icons
keycodemapdb@d21009b1c9 ui: update keycodemapdb submodule commit 2021-07-26 10:24:49 +02:00
shader
clipboard.c ui: avoid compiler warnings from unused clipboard info variable 2022-01-18 16:42:41 +00:00
cocoa.m ui/cocoa.m: Fix updateUIInfo threading issues 2022-03-02 19:27:37 +00:00
console-gl.c opengl: Do not convert format with glTexImage2D on OpenGL ES 2021-03-15 17:37:49 +01:00
console.c console: save current scanout details 2021-12-21 10:50:21 +04:00
curses_keys.h
curses.c meson.build: Support ncurses on MacOS and OpenBSD 2021-11-19 10:18:27 +01:00
cursor_hidden.xpm
cursor_left_ptr.xpm
cursor.c
dbus-chardev.c ui/dbus: add chardev backend & interface 2021-12-21 10:50:22 +04:00
dbus-clipboard.c ui/dbus: add clipboard interface 2021-12-21 10:50:22 +04:00
dbus-console.c ui/dbus: add p2p=on/off option 2021-12-21 10:50:22 +04:00
dbus-display1.xml ui/dbus: add chardev backend & interface 2021-12-21 10:50:22 +04:00
dbus-error.c ui: add a D-Bus display backend 2021-12-21 10:50:22 +04:00
dbus-listener.c ui/dbus: add p2p=on/off option 2021-12-21 10:50:22 +04:00
dbus-module.c ui/dbus: add p2p=on/off option 2021-12-21 10:50:22 +04:00
dbus.c ui/dbus: fix buffer-overflow detected by ASAN 2022-01-13 10:48:43 +01:00
dbus.h ui/dbus: add chardev backend & interface 2021-12-21 10:50:22 +04:00
egl-context.c ui: split the GL context in a different object 2021-12-21 10:50:21 +04:00
egl-headless.c ui: split the GL context in a different object 2021-12-21 10:50:21 +04:00
egl-helpers.c ui/gtk-egl: blitting partial guest fb to the proper scanout surface 2021-11-05 12:29:44 +01:00
gtk-clipboard.c ui: fix gtk clipboard clear assertion 2022-01-13 10:57:43 +01:00
gtk-egl.c ui: split the GL context in a different object 2021-12-21 10:50:21 +04:00
gtk-gl-area.c ui: split the GL context in a different object 2021-12-21 10:50:21 +04:00
gtk.c ui/gtk: pass horizontal scroll information to the device code 2022-01-13 15:33:18 +01:00
input-barrier.c ui/input-barrier: Move TODOs from barrier.txt to a comment 2021-08-02 12:55:51 +01:00
input-barrier.h
input-keymap.c
input-legacy.c ui/input-legacy: pass horizontal scroll information 2022-01-13 15:33:18 +01:00
input-linux.c
input.c
kbd-state.c
keymaps.c
keymaps.h
meson.build ui/dbus: add chardev backend & interface 2021-12-21 10:50:22 +04:00
qemu-pixman.c ui/pixman: Add qemu_pixman_to_drm_format() 2021-05-27 12:07:37 +02:00
qemu-x509.h
qemu.desktop
sdl2-2d.c ui/console: Pass placeholder surface to displays 2021-03-04 09:35:36 +01:00
sdl2-gl.c ui: split the GL context in a different object 2021-12-21 10:50:21 +04:00
sdl2-input.c
sdl2.c ui/sdl2: pass horizontal scroll information to the device code 2022-01-13 15:33:18 +01:00
shader.c
spice-app.c ui/spice: Use HAVE_SPICE_GL for OpenGL checks 2021-07-26 10:24:49 +02:00
spice-core.c ui: move qemu_spice_fill_device_address to ui/util.c 2021-12-21 10:50:21 +04:00
spice-display.c spice: Update QXLInterface for spice >= 0.15.0 2022-01-18 16:42:41 +00:00
spice-input.c
spice-module.c
trace-events ui/dbus: add clipboard interface 2021-12-21 10:50:22 +04:00
trace.h
udmabuf.c ui/console: Restrict udmabuf_fd() to Linux 2021-08-31 14:31:43 +02:00
util.c ui: move qemu_spice_fill_device_address to ui/util.c 2021-12-21 10:50:21 +04:00
vdagent.c ui/clipboard: add a clipboard reset serial event 2021-12-21 10:50:21 +04:00
vgafont.h
vnc_keysym.h
vnc-auth-sasl.c vnc: avoid deprecation warnings for SASL on OS X 2021-06-15 17:17:09 +02:00
vnc-auth-sasl.h vnc: avoid deprecation warnings for SASL on OS X 2021-06-15 17:17:09 +02:00
vnc-auth-vencrypt.c
vnc-auth-vencrypt.h
vnc-clipboard.c ui/clipboard: add a clipboard reset serial event 2021-12-21 10:50:21 +04:00
vnc-enc-hextile-template.h
vnc-enc-hextile.c
vnc-enc-tight.c
vnc-enc-tight.h
vnc-enc-zlib.c
vnc-enc-zrle.c
vnc-enc-zrle.c.inc
vnc-enc-zrle.h
vnc-enc-zywrle-template.c
vnc-enc-zywrle.h
vnc-jobs.c ui: avoid sending framebuffer updates outside client desktop bounds 2021-03-15 17:37:50 +01:00
vnc-jobs.h
vnc-palette.c
vnc-palette.h
vnc-stubs.c vnc: support "-vnc help" 2021-01-23 15:55:07 -05:00
vnc-ws.c
vnc-ws.h
vnc.c ui/vnc.c: Fixed a deadlock bug. 2022-01-13 10:46:33 +01:00
vnc.h ui/vnc: clipboard support 2021-05-21 09:42:44 +02:00
win32-kbd-hook.c
x_keymap.c ui: Fix memory leak in qemu_xkeymap_mapping_table() 2021-05-02 17:24:50 +02:00
x_keymap.h