winegstreamer: Unblock waits in sink_chain_cb() when disabling a stream.
Signed-off-by: Zebediah Figura <zfigura@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
5861379d6d
commit
bcd39c5061
|
@ -255,6 +255,7 @@ static NTSTATUS wg_parser_stream_disable(void *args)
|
||||||
pthread_mutex_lock(&parser->mutex);
|
pthread_mutex_lock(&parser->mutex);
|
||||||
stream->enabled = false;
|
stream->enabled = false;
|
||||||
pthread_mutex_unlock(&parser->mutex);
|
pthread_mutex_unlock(&parser->mutex);
|
||||||
|
pthread_cond_signal(&stream->event_empty_cond);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -541,6 +542,12 @@ static GstFlowReturn sink_chain_cb(GstPad *pad, GstObject *parent, GstBuffer *bu
|
||||||
|
|
||||||
pthread_mutex_lock(&parser->mutex);
|
pthread_mutex_lock(&parser->mutex);
|
||||||
|
|
||||||
|
/* Allow this buffer to be flushed by GStreamer. We are effectively
|
||||||
|
* implementing a queue object here. */
|
||||||
|
|
||||||
|
while (stream->enabled && !stream->flushing && stream->buffer)
|
||||||
|
pthread_cond_wait(&stream->event_empty_cond, &parser->mutex);
|
||||||
|
|
||||||
if (!stream->enabled)
|
if (!stream->enabled)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&parser->mutex);
|
pthread_mutex_unlock(&parser->mutex);
|
||||||
|
@ -548,11 +555,6 @@ static GstFlowReturn sink_chain_cb(GstPad *pad, GstObject *parent, GstBuffer *bu
|
||||||
return GST_FLOW_OK;
|
return GST_FLOW_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Allow this buffer to be flushed by GStreamer. We are effectively
|
|
||||||
* implementing a queue object here. */
|
|
||||||
|
|
||||||
while (!stream->flushing && stream->buffer)
|
|
||||||
pthread_cond_wait(&stream->event_empty_cond, &parser->mutex);
|
|
||||||
if (stream->flushing)
|
if (stream->flushing)
|
||||||
{
|
{
|
||||||
pthread_mutex_unlock(&parser->mutex);
|
pthread_mutex_unlock(&parser->mutex);
|
||||||
|
|
Loading…
Reference in New Issue