gstreamer/gst/rtpmanager
Nicolas Dufresne b4f421e9aa rtpjitterbuffer: Keep JBUF lock while processing timers
Until now, do_expected_timeout() was shortly dropping the JBUF_LOCK in order
to push RTX event event without causing deadlock. As a side effect, some
CPU hung would happen as the timerqueue would get filled while looping over
the due timers. To mitigate this, we were processing the lost timer first and
placing into a queue the remainign to be processed later.

In the gap caused by an unlock, we could endup receiving one of the seqnum
present in the pending timers. In that case, the timer would not be found and
a new one was created. When we then update the expected timer, the seqnum
would already exist and the updated timer would be lost.

In this patch we remove the unlock from do_expected_timeout() and place all
pending RTX event into a queue (instead of pending timer). Then, as soon as
we have selected a timer to wait (or if there is no timer to wait for) we send
all the upstream RTX events. As we no longer unlock, we no longer need to pop
more then one timer from the queue, and we do so with the lock held, which
blocks any new colliding timers from being created.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/616>
2020-06-08 17:54:53 -04:00
..
gstrtpbin.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtpbin.h rtpbin: add request-jitterbuffer signal 2019-09-24 15:33:21 +00:00
gstrtpdtmfmux.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpdtmfmux.h rtpmux: Fix FSF address 2012-12-16 16:36:39 +00:00
gstrtpfunnel.c rtpfunnel: various cleanups 2020-02-14 10:08:05 +00:00
gstrtpfunnel.h rtpfunnel: Stop using G_DECLARE_FINAL_TYPE 2018-11-13 00:37:11 +01:00
gstrtpjitterbuffer.c rtpjitterbuffer: Keep JBUF lock while processing timers 2020-06-08 17:54:53 -04:00
gstrtpjitterbuffer.h rtpjitterbuffer: small optimizations 2014-04-29 16:21:44 +02:00
gstrtpmanager.c Initial commit of GstRtpFunnel 2018-10-15 14:20:58 +02:00
gstrtpmux.c docs: Port all docstring to gtk-doc markdown 2019-05-13 10:24:40 -04:00
gstrtpmux.h doc: Fix some docstrings 2019-05-13 17:00:00 -04:00
gstrtpptdemux.c rtpptdemux: set payload to caps inside gst_rtp_pt_demux_get_caps 2020-02-11 18:39:22 +00:00
gstrtpptdemux.h documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtprtxqueue.c doc: fix element section documentations 2019-05-25 16:57:31 +02:00
gstrtprtxqueue.h rtprtxqueue: implement handling of the max-size-time property 2017-04-11 09:44:33 +03:00
gstrtprtxreceive.c documentation: fix a number of typos 2019-10-05 22:38:11 +00:00
gstrtprtxreceive.h rtprtxreceive: Wait until timeout to clear association requests 2014-05-04 22:36:59 -04:00
gstrtprtxsend.c rtprtxsend: allow generic input caps 2020-01-28 15:44:13 +00:00
gstrtprtxsend.h rtprtxsend: allow generic input caps 2020-01-28 15:44:13 +00:00
gstrtpsession.c plugins: uddate gst_type_mark_as_plugin_api() calls 2020-06-06 00:42:25 +02:00
gstrtpsession.h rtpsession: use the correct segment seqnum 2019-02-04 13:14:37 +00:00
gstrtpssrcdemux.c rtpssrcdemux: Handle RTCP APP packets 2020-02-11 15:12:07 +01:00
gstrtpssrcdemux.h rtpssrcdemux: introduce max-streams property 2020-02-11 15:10:12 +01:00
meson.build rtpmanager: Google Transport-Wide Congestion Control RTP Extension 2020-02-14 10:09:02 +00:00
rtpjitterbuffer.c rtpjitterbuffer: Properly free internal packets queue in finalize() 2020-04-22 10:28:30 -04:00
rtpjitterbuffer.h rtpjitterbuffer: Properly free internal packets queue in finalize() 2020-04-22 10:28:30 -04:00
rtpsession.c rtptwcc: make RTPTWCCManager a GObject 2020-03-04 16:48:04 +01:00
rtpsession.h rtpmanager: Google Transport-Wide Congestion Control RTP Extension 2020-02-14 10:09:02 +00:00
rtpsource.c rtpmanager: Google Transport-Wide Congestion Control RTP Extension 2020-02-14 10:09:02 +00:00
rtpsource.h rtpsession: Send as many nack seqnum as possible 2019-04-05 14:53:09 +00:00
rtpstats.c rtpmanager: Google Transport-Wide Congestion Control RTP Extension 2020-02-14 10:09:02 +00:00
rtpstats.h rtpmanager: Google Transport-Wide Congestion Control RTP Extension 2020-02-14 10:09:02 +00:00
rtptimerqueue.c rtptimerqueue: remove ->num from the timer 2020-03-20 13:17:20 +00:00
rtptimerqueue.h rtptimerqueue: remove ->num from the timer 2020-03-20 13:17:20 +00:00
rtptwcc.c Fix usage of C99 2020-03-23 21:32:04 -04:00
rtptwcc.h rtptwcc: make RTPTWCCManager a GObject 2020-03-04 16:48:04 +01:00