mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 22:16:22 +00:00
assrender: Fix race condition that results in a deadlock on shutdown
This commit is contained in:
parent
64eb516283
commit
c5ed836f2d
1 changed files with 7 additions and 0 deletions
|
@ -272,6 +272,7 @@ gst_assrender_change_state (GstElement * element, GstStateChange transition)
|
||||||
|
|
||||||
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
case GST_STATE_CHANGE_PAUSED_TO_READY:
|
||||||
g_mutex_lock (render->subtitle_mutex);
|
g_mutex_lock (render->subtitle_mutex);
|
||||||
|
render->subtitle_flushing = TRUE;
|
||||||
if (render->subtitle_pending)
|
if (render->subtitle_pending)
|
||||||
gst_buffer_unref (render->subtitle_pending);
|
gst_buffer_unref (render->subtitle_pending);
|
||||||
render->subtitle_pending = NULL;
|
render->subtitle_pending = NULL;
|
||||||
|
@ -622,6 +623,12 @@ gst_assrender_chain_text (GstPad * pad, GstBuffer * buffer)
|
||||||
if (timestamp > render->video_segment.last_stop) {
|
if (timestamp > render->video_segment.last_stop) {
|
||||||
g_assert (render->subtitle_pending == NULL);
|
g_assert (render->subtitle_pending == NULL);
|
||||||
g_mutex_lock (render->subtitle_mutex);
|
g_mutex_lock (render->subtitle_mutex);
|
||||||
|
if (G_UNLIKELY (render->subtitle_flushing)) {
|
||||||
|
GST_DEBUG_OBJECT (render, "Text pad flushing");
|
||||||
|
gst_object_unref (buffer);
|
||||||
|
g_mutex_unlock (render->subtitle_mutex);
|
||||||
|
return GST_FLOW_WRONG_STATE;
|
||||||
|
}
|
||||||
render->subtitle_pending = buffer;
|
render->subtitle_pending = buffer;
|
||||||
g_cond_wait (render->subtitle_cond, render->subtitle_mutex);
|
g_cond_wait (render->subtitle_cond, render->subtitle_mutex);
|
||||||
g_mutex_unlock (render->subtitle_mutex);
|
g_mutex_unlock (render->subtitle_mutex);
|
||||||
|
|
Loading…
Reference in a new issue