From 35db71f88a02c455f3d73f270a33df87f799b0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Brzezi=C5=84ski?= Date: Fri, 5 May 2023 18:27:14 +0200 Subject: [PATCH] osxvideosink: fix deadlock upon closing output window Invoking gst_osx_video_sink_osxwindow_destroy() can currently cause a deadlock because showFrame() keeps trying to get the same lock as well. Moving the lock closer to where it's actually needed seems to be enough to fix the issue for now. Reported-by: Alexande B Part-of: --- subprojects/gst-plugins-good/sys/osxvideo/osxvideosink.m | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/subprojects/gst-plugins-good/sys/osxvideo/osxvideosink.m b/subprojects/gst-plugins-good/sys/osxvideo/osxvideosink.m index b2c905cc43..4d5d2b4551 100644 --- a/subprojects/gst-plugins-good/sys/osxvideo/osxvideosink.m +++ b/subprojects/gst-plugins-good/sys/osxvideo/osxvideosink.m @@ -301,11 +301,9 @@ gst_osx_video_sink_osxwindow_destroy (GstOSXVideoSink * osxvideosink) g_return_if_fail (GST_IS_OSX_VIDEO_SINK (osxvideosink)); pool = [[NSAutoreleasePool alloc] init]; - GST_OBJECT_LOCK (osxvideosink); gst_osx_video_sink_call_from_main_thread(osxvideosink, osxvideosink->osxvideosinkobject, @selector(destroy), (id) nil, YES); - GST_OBJECT_UNLOCK (osxvideosink); #ifndef GSTREAMER_GLIB_COCOA_NSAPPLICATION gst_osx_video_sink_stop_cocoa_loop (osxvideosink); #endif @@ -914,6 +912,7 @@ no_texture_buffer: pool = [[NSAutoreleasePool alloc] init]; + GST_OBJECT_LOCK (osxvideosink); osxwindow = osxvideosink->osxwindow; osxvideosink->osxwindow = NULL; @@ -931,6 +930,8 @@ no_texture_buffer: } g_free (osxwindow); } + GST_OBJECT_UNLOCK (osxvideosink); + [pool release]; }