mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-23 02:01:12 +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/4559>
This commit is contained in:
parent
ad2d1ce393
commit
560d20a2c0
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