From be7ac828de77cf8b75bde9dd139dd8e07421b5df Mon Sep 17 00:00:00 2001 From: PatTheMav Date: Fri, 8 Dec 2023 14:48:33 +0100 Subject: [PATCH] mac-capture: Fix ScreenCaptureKit deadlock when using nil display ID In some scenarios ScreenCaptureKit will not call our completion handler when an internal ReplayKit error occurred. This seems to be more common when a display id is provided as the content filter for ScreenCaptureKit. The issue was reported to Apple as FB13455947, but it is good practice for us to check for an invalid display ID before even attempting to start a capture stream. --- plugins/mac-capture/mac-sck-video-capture.m | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/plugins/mac-capture/mac-sck-video-capture.m b/plugins/mac-capture/mac-sck-video-capture.m index b5ae4a9b1..59a8d09bd 100644 --- a/plugins/mac-capture/mac-sck-video-capture.m +++ b/plugins/mac-capture/mac-sck-video-capture.m @@ -108,6 +108,13 @@ static bool init_screen_stream(struct screen_capture *sc) case ScreenCaptureDisplayStream: { SCDisplay *target_display = get_target_display(); + if (!target_display) { + MACCAP_ERR("init_screen_stream: Invalid target display ID: %u\n", sc->display); + + os_sem_post(sc->shareable_content_available); + return false; + } + if (sc->hide_obs) { SCRunningApplication *obsApp = nil; NSString *mainBundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];