mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-19 16:21:17 +00:00
plugins/elements/gstqueue.c: Since we're not called only from the chain function any longer, we can't assume that the...
Original commit message from CVS: * plugins/elements/gstqueue.c: (gst_queue_leak_downstream): Since we're not called only from the chain function any longer, we can't assume that there's always data in the queue, so move the is_full check to the beginning of the loop (otherwise we'd hit the assert when changing the limit properties while the queue is empty or not running yet). Also, only set a discont if items were actually removed from the queue. * tests/check/elements/queue.c: (test_leaky_downstream): Test case for the above.
This commit is contained in:
parent
0da9f87257
commit
449a426169
3 changed files with 20 additions and 5 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2008-04-30 Tim-Philipp Müller <tim.muller at collabora co uk>
|
||||||
|
|
||||||
|
* plugins/elements/gstqueue.c: (gst_queue_leak_downstream):
|
||||||
|
Since we're not called only from the chain function any longer,
|
||||||
|
we can't assume that there's always data in the queue, so move
|
||||||
|
the is_full check to the beginning of the loop (otherwise we'd
|
||||||
|
hit the assert when changing the limit properties while the
|
||||||
|
queue is empty or not running yet).
|
||||||
|
Also, only set a discont if items were actually removed from
|
||||||
|
the queue.
|
||||||
|
|
||||||
|
* tests/check/elements/queue.c: (test_leaky_downstream):
|
||||||
|
Test case for the above.
|
||||||
|
|
||||||
2008-04-30 Wim Taymans <wim.taymans@collabora.co.uk>
|
2008-04-30 Wim Taymans <wim.taymans@collabora.co.uk>
|
||||||
|
|
||||||
Patch by: Jonas Holmberg <jonas dot holmberg at axis dot com>
|
Patch by: Jonas Holmberg <jonas dot holmberg at axis dot com>
|
||||||
|
|
|
@ -835,7 +835,7 @@ static void
|
||||||
gst_queue_leak_downstream (GstQueue * queue)
|
gst_queue_leak_downstream (GstQueue * queue)
|
||||||
{
|
{
|
||||||
/* for as long as the queue is filled, dequeue an item and discard it */
|
/* for as long as the queue is filled, dequeue an item and discard it */
|
||||||
do {
|
while (gst_queue_is_filled (queue)) {
|
||||||
GstMiniObject *leak;
|
GstMiniObject *leak;
|
||||||
|
|
||||||
leak = gst_queue_locked_dequeue (queue);
|
leak = gst_queue_locked_dequeue (queue);
|
||||||
|
@ -846,10 +846,11 @@ gst_queue_leak_downstream (GstQueue * queue)
|
||||||
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue,
|
GST_CAT_DEBUG_OBJECT (queue_dataflow, queue,
|
||||||
"queue is full, leaking item %p on downstream end", leak);
|
"queue is full, leaking item %p on downstream end", leak);
|
||||||
gst_buffer_unref (leak);
|
gst_buffer_unref (leak);
|
||||||
} while (gst_queue_is_filled (queue));
|
|
||||||
/* last buffer needs to get a DISCONT flag */
|
/* last buffer needs to get a DISCONT flag */
|
||||||
queue->head_needs_discont = TRUE;
|
queue->head_needs_discont = TRUE;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static GstFlowReturn
|
static GstFlowReturn
|
||||||
gst_queue_chain (GstPad * pad, GstBuffer * buffer)
|
gst_queue_chain (GstPad * pad, GstBuffer * buffer)
|
||||||
|
|
|
@ -267,7 +267,7 @@ GST_START_TEST (test_leaky_downstream)
|
||||||
queue = setup_queue ();
|
queue = setup_queue ();
|
||||||
mysrcpad = gst_check_setup_src_pad (queue, &srctemplate, NULL);
|
mysrcpad = gst_check_setup_src_pad (queue, &srctemplate, NULL);
|
||||||
mysinkpad = gst_check_setup_sink_pad (queue, &sinktemplate, NULL);
|
mysinkpad = gst_check_setup_sink_pad (queue, &sinktemplate, NULL);
|
||||||
g_object_set (G_OBJECT (queue), "max-size-buffers", 2, "leaky", 2, NULL);
|
g_object_set (G_OBJECT (queue), "leaky", 2, "max-size-buffers", 2, NULL);
|
||||||
gst_pad_set_active (mysrcpad, TRUE);
|
gst_pad_set_active (mysrcpad, TRUE);
|
||||||
|
|
||||||
GST_DEBUG ("starting");
|
GST_DEBUG ("starting");
|
||||||
|
|
Loading…
Reference in a new issue