After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 739709 - rtpjitterbuffer: dead loop when schedule one dead line timer.
rtpjitterbuffer: dead loop when schedule one dead line timer.
Status: RESOLVED OBSOLETE
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
1.2.3
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2014-11-06 07:03 UTC by kevin
Modified: 2014-12-05 03:32 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
patch to fix the issue. (1.68 KB, patch)
2014-11-06 07:07 UTC, kevin
rejected Details | Review

Description kevin 2014-11-06 07:03:05 UTC
rtpjitterbuffer will schedule one dead line timer if expected sequence number is -1. the timer will record the sequence number. but rtpjitterbuffer source pad active will send signal to start push buffer, it will cause can't find timer recorded packet and dead loop in handle_next_buffer().
Comment 1 kevin 2014-11-06 07:07:19 UTC
Created attachment 290071 [details] [review]
patch to fix the issue.
Comment 2 kevin 2014-12-01 09:52:07 UTC
one patch on latest code has fixed the issue. close it.
Comment 3 Sebastian Dröge (slomo) 2014-12-01 09:58:42 UTC
Do you know which one?
Comment 4 kevin 2014-12-05 03:32:50 UTC
commit 6c584bc8337da0a19287d51eaf05c608711b9ef5
Author: Mark Nauwelaerts <mnauw@users.sourceforge.net>
Date:   Sun May 4 13:37:46 2014 +0200

    rtpjitterbuffer: avoid stall by corrupted seqnum accounting

diff --git a/gst/rtpmanager/gstrtpjitterbuffer.c b/gst/rtpmanager/gstrtpjitterbuffer.c
index 1459e91..62d7228 100644
--- a/gst/rtpmanager/gstrtpjitterbuffer.c
+++ b/gst/rtpmanager/gstrtpjitterbuffer.c
@@ -2826,7 +2826,10 @@ do_deadline_timeout (GstRtpJitterBuffer * jitterbuffer, TimerData * timer,
 
   GST_INFO_OBJECT (jitterbuffer, "got deadline timeout");
 
-  priv->next_seqnum = timer->seqnum;
+  /* timer seqnum might have been obsoleted by caps seqnum-base,
+   * only mess with current ongoing seqnum if still unknown */
+  if (priv->next_seqnum == -1)
+    priv->next_seqnum = timer->seqnum;
   remove_timer (jitterbuffer, timer);
   JBUF_SIGNAL_EVENT (priv);