mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-29 11:40:38 +00:00
b4f421e9aa
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> |
||
---|---|---|
.. | ||
gstrtpbin.c | ||
gstrtpbin.h | ||
gstrtpdtmfmux.c | ||
gstrtpdtmfmux.h | ||
gstrtpfunnel.c | ||
gstrtpfunnel.h | ||
gstrtpjitterbuffer.c | ||
gstrtpjitterbuffer.h | ||
gstrtpmanager.c | ||
gstrtpmux.c | ||
gstrtpmux.h | ||
gstrtpptdemux.c | ||
gstrtpptdemux.h | ||
gstrtprtxqueue.c | ||
gstrtprtxqueue.h | ||
gstrtprtxreceive.c | ||
gstrtprtxreceive.h | ||
gstrtprtxsend.c | ||
gstrtprtxsend.h | ||
gstrtpsession.c | ||
gstrtpsession.h | ||
gstrtpssrcdemux.c | ||
gstrtpssrcdemux.h | ||
meson.build | ||
rtpjitterbuffer.c | ||
rtpjitterbuffer.h | ||
rtpsession.c | ||
rtpsession.h | ||
rtpsource.c | ||
rtpsource.h | ||
rtpstats.c | ||
rtpstats.h | ||
rtptimerqueue.c | ||
rtptimerqueue.h | ||
rtptwcc.c | ||
rtptwcc.h |