mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
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>
This commit is contained in:
parent
8209ae476f
commit
35db71f88a
1 changed files with 3 additions and 2 deletions
|
@ -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];
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue