Skip to content

Commit

Permalink
appsink: Handle unlock in drain query handling too
Browse files Browse the repository at this point in the history
And also handle flushing, we might otherwise wait here forever when
flushing too.
  • Loading branch information
sdroege committed May 2, 2018
1 parent 9f9000e commit dbd9ff1
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions gst-libs/gst/app/gstappsink.c
Expand Up @@ -1026,9 +1026,25 @@ gst_app_sink_query (GstBaseSink * bsink, GstQuery * query)
g_mutex_lock (&priv->mutex);
GST_DEBUG_OBJECT (appsink, "waiting buffers to be consumed");
while (priv->num_buffers > 0 || priv->preroll_buffer) {
if (priv->unlock) {
/* we are asked to unlock, call the wait_preroll method */
g_mutex_unlock (&priv->mutex);
if (gst_base_sink_wait_preroll (bsink) != GST_FLOW_OK) {
/* Directly go out of here */
return FALSE;
}

/* we are allowed to continue now */
g_mutex_lock (&priv->mutex);
continue;
}

priv->wait_status |= STREAM_WAITING;
g_cond_wait (&priv->cond, &priv->mutex);
priv->wait_status &= ~STREAM_WAITING;

if (priv->flushing)
break;
}
g_mutex_unlock (&priv->mutex);
ret = GST_BASE_SINK_CLASS (parent_class)->query (bsink, query);
Expand Down

0 comments on commit dbd9ff1

Please sign in to comment.