mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-25 09:40:37 +00:00
rtptimerqueue: Fix leak on timer collision
While the caller should make sure this does not happen, make sure timer collision are not silently ignored and leaked. Fixes #726 Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/616>
This commit is contained in:
parent
b4f421e9aa
commit
5b2ad31583
1 changed files with 6 additions and 3 deletions
|
@ -391,22 +391,25 @@ rtp_timer_queue_new (void)
|
||||||
/**
|
/**
|
||||||
* rtp_timer_queue_insert:
|
* rtp_timer_queue_insert:
|
||||||
* @queue: the #RtpTimerQueue object
|
* @queue: the #RtpTimerQueue object
|
||||||
* @timer: the #RtpTimer to insert
|
* @timer: (transfer full): the #RtpTimer to insert
|
||||||
*
|
*
|
||||||
* Insert a timer into the queue. Earliest timer are at the head and then
|
* Insert a timer into the queue. Earliest timer are at the head and then
|
||||||
* timer are sorted by seqnum (smaller seqnum first). This function is o(n)
|
* timer are sorted by seqnum (smaller seqnum first). This function is o(n)
|
||||||
* but it is expected that most timers added are schedule later, in which case
|
* but it is expected that most timers added are schedule later, in which case
|
||||||
* the insertion will be faster.
|
* the insertion will be faster.
|
||||||
*
|
*
|
||||||
* Returns: %FLASE is a timer with the same seqnum already existed
|
* Returns: %FALSE if a timer with the same seqnum already existed
|
||||||
*/
|
*/
|
||||||
gboolean
|
gboolean
|
||||||
rtp_timer_queue_insert (RtpTimerQueue * queue, RtpTimer * timer)
|
rtp_timer_queue_insert (RtpTimerQueue * queue, RtpTimer * timer)
|
||||||
{
|
{
|
||||||
g_return_val_if_fail (timer->queued == FALSE, FALSE);
|
g_return_val_if_fail (timer->queued == FALSE, FALSE);
|
||||||
|
|
||||||
if (rtp_timer_queue_find (queue, timer->seqnum))
|
if (rtp_timer_queue_find (queue, timer->seqnum)) {
|
||||||
|
rtp_timer_free (timer);
|
||||||
|
GST_WARNING ("Timer queue collision, freeing duplicate.");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
if (timer->timeout == -1)
|
if (timer->timeout == -1)
|
||||||
rtp_timer_queue_insert_head (queue, timer);
|
rtp_timer_queue_insert_head (queue, timer);
|
||||||
|
|
Loading…
Reference in a new issue