qemu-e2k/audio
Akihiko Odaki eb1a35e47a coreaudio: Lock only the buffer
On macOS 11.3.1, Core Audio calls AudioDeviceIOProc after calling an
internal function named HALB_Mutex::Lock(), which locks a mutex in
HALB_IOThread::Entry(void*). HALB_Mutex::Lock() is also called in
AudioObjectGetPropertyData, which is called by coreaudio driver.
Therefore, a deadlock will occur if coreaudio driver calls
AudioObjectGetPropertyData while holding a lock for a mutex and tries
to lock the same mutex in AudioDeviceIOProc.

audioDeviceIOProc, which implements AudioDeviceIOProc in coreaudio
driver, requires an exclusive access for the device configuration and
the buffer. Fortunately, a mutex is necessary only for the buffer in
audioDeviceIOProc because a change for the device configuration occurs
only before setting up AudioDeviceIOProc or after stopping the playback
with AudioDeviceStop.

With this change, the mutex owned by the driver will only be used for
the buffer, and the device configuration change will be protected with
the implicit iothread mutex.

Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Message-id: 20210622201740.38005-1-akihiko.odaki@gmail.com
Message-Id: <20210622201740.38005-1-akihiko.odaki@gmail.com>
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
2021-06-23 14:16:48 +02:00
..
alsaaudio.c alsaaudio: remove #ifdef DEBUG to avoid bit rot 2021-06-17 11:54:09 +02:00
audio.c audio: Fix format specifications of debug logs 2021-06-17 11:56:57 +02:00
audio.h qdev: Move softmmu properties to qdev-properties-system.h 2020-12-18 15:20:17 -05:00
audio_int.h audio: move code to audio/audio.c 2021-06-17 11:54:09 +02:00
audio_legacy.c sdlaudio: add -audiodev sdl,out.buffer-count option 2021-01-15 11:25:22 +01:00
audio_template.h audio: space prohibited between function name and parenthesis'(' 2021-01-15 11:49:26 +01:00
audio_win_int.c dsoundaudio: fix log message 2021-01-15 11:25:22 +01:00
audio_win_int.h Windows Waveform Audio driver (no ADC support yet) 2009-10-10 01:18:24 +04:00
coreaudio.c coreaudio: Lock only the buffer 2021-06-23 14:16:48 +02:00
dsound_template.h dsoundaudio: replace GetForegroundWindow() 2021-01-15 11:25:22 +01:00
dsoundaudio.c audio: Don't use '%#' in format strings 2021-01-15 11:49:26 +01:00
jackaudio.c jackaudio: avoid that the client name contains the word (NULL) 2021-06-17 11:54:09 +02:00
meson.build meson: add spice_headers dependency. 2020-10-15 11:14:40 +02:00
mixeng.c audio: Let audio_sample_to_uint64() use const samples argument 2020-05-26 08:29:30 +02:00
mixeng.h audio: proper support for float samples in mixeng 2020-02-06 14:35:57 +01:00
mixeng_template.h audio: fix saturation nonlinearity in clip_* functions 2020-03-16 10:18:07 +01:00
noaudio.c audio: split pcm_ops function get_buffer_in 2021-01-15 11:25:22 +01:00
ossaudio.c audio: Add braces for statements/fix braces' position 2021-01-15 11:49:26 +01:00
paaudio.c audio: move code to audio/audio.c 2021-06-17 11:54:09 +02:00
rate_template.h audio: use size_t where makes sense 2019-08-21 09:13:37 +02:00
sdlaudio.c sdlaudio: enable (in|out).mixing-engine=off 2021-01-15 11:25:22 +01:00
spiceaudio.c audio: split pcm_ops function get_buffer_in 2021-01-15 11:25:22 +01:00
trace-events docs: fix references to docs/devel/tracing.rst 2021-06-02 06:51:09 +02:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
wavaudio.c audio: fix bug 1858488 2020-01-31 08:48:03 +01:00
wavcapture.c monitor: Use getter/setter functions for cur_mon 2020-10-09 07:08:19 +02:00