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 723473 - rtpbasepayload: wait for all buffers in a list to be sent before flushing
rtpbasepayload: wait for all buffers in a list to be sent before flushing
Status: RESOLVED NOTABUG
Product: GStreamer
Classification: Platform
Component: gst-plugins-base
git master
Other Linux
: Normal normal
: git master
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2014-02-02 13:23 UTC by Vincent Penquerc'h
Modified: 2014-02-04 12:50 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
locking patch (5.43 KB, patch)
2014-02-02 13:23 UTC, Vincent Penquerc'h
rejected Details | Review

Description Vincent Penquerc'h 2014-02-02 13:23:11 UTC
Created attachment 267846 [details] [review]
locking patch

Pushing a buffer list locks the payloader's source pad only
when pushing a buffer. If an intervening flush comes through,
this means only the first few buffers may be pushed before
the soure pad becomes flushing. This could cause a spurious
discontinuity, so we lock the (recursive) stream lock on the
source pad to ensure all buffers are pushed atomically.

However, there are two cases where one needs the flush to
break in the middle of a list:

- when the flush is triggered by a seek from downstream (in
this case, since downstream will block till the original
request finishes, it will not process any further buffers
(if it does both in the same thread anyway)).

- when a state change occurs


Not 100% sure about this. It fixes a spurious discontinuity in a test case, but the need for exceptions feels a bit unfortunate.
Comment 1 Wim Taymans 2014-02-03 09:09:07 UTC
A flush will be forwarded upstream, the remaining buffers from the list are pushed and dropped. Then the flush-stop can go through and new buffers can be pushed. A flush is supposed to created a DISCONT. What is the problem?
Comment 2 Vincent Penquerc'h 2014-02-03 22:37:57 UTC
After discussion on IRC, this is not a good idea, and should be done at a higher layer if needed. Closing as NOTABUG since it all technically behaves as designed.