osxaudio: Fix AudioOutputUnitStart() deadlock on iOS >=17

At some point in iOS 17, this call started waiting for the first render callback (io_proc) to finish.
In our case, that callback also takes the ringbuf object lock by calling gst_audio_ring_buffer_set_timestamp(),
which results in a deadlock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7856>
This commit is contained in:
Piotr Brzeziński 2024-11-08 11:57:49 +01:00 committed by GStreamer Marge Bot
parent 307cfc2561
commit 49489d35ae

View File

@ -122,7 +122,11 @@ gst_core_audio_io_proc_start (GstCoreAudio * core_audio)
core_audio->io_proc_needs_deactivation = FALSE;
// AudioOutputUnitStart on iOS can wait for the render callback to finish,
// where in our case we set the ringbuffer timestamp, which also needs the ringbuf lock.
GST_OBJECT_UNLOCK (core_audio->osxbuf);
status = AudioOutputUnitStart (core_audio->audiounit);
GST_OBJECT_LOCK (core_audio->osxbuf);
if (status) {
GST_ERROR_OBJECT (core_audio->osxbuf, "AudioOutputUnitStart failed: %d",
(int) status);