summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPiotr Brzeziński <piotr@centricular.com>2023-05-05 18:27:14 +0200
committerTim-Philipp Müller <tim@centricular.com>2023-05-13 18:41:33 +0100
commit35db71f88a02c455f3d73f270a33df87f799b0ce (patch)
tree8a689ae735886ef548a0d68aa7187d4c44384489
parent8209ae476fd73f1e7733de7caa105771f249d040 (diff)
downloadgstreamer-35db71f88a02c455f3d73f270a33df87f799b0ce.tar.gz
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 <abobrikovich@gmail.com> Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/4627>
-rw-r--r--subprojects/gst-plugins-good/sys/osxvideo/osxvideosink.m5
1 files 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];
}