Bug ID | 1031890 |
---|---|
Summary | GStreamer regression, multifilesink writes no longer atomic |
Classification | openSUSE |
Product | openSUSE Distribution |
Version | Leap 42.2 |
Hardware | x86-64 |
OS | openSUSE 42.2 |
Status | NEW |
Severity | Major |
Priority | P5 - None |
Component | Other |
Assignee | bnc-team-screening@forge.provo.novell.com |
Reporter | pafee@tycoint.com |
QA Contact | qa-bugs@suse.de |
Found By | --- |
Blocker | --- |
User-Agent: Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0 Build Identifier: Leap 42.1 comes with GStreamer 1.2, Leap 42.2 with GStreamer 1.8. A regression in upstream GStreamer means that 1.8 has a bug that's not present in 1.2 (and has since been fixed in 1.10). https://bugzilla.gnome.org/show_bug.cgi?id=766990 The multifilesink element can output video as a collection of files. Atomic writes are important so that consumers of these files never see files that are empty or partially written. The bug means that applications that rely the multifilesink element can work as expected on Leap 42.1 but break on 42.2. Reproducible: Always Steps to Reproduce: 1. Use strace to watch how the multifilesink element writes to files. strace -fe open,close,rename gst-launch-1.0 -v videotestsrc ! multifilesink 2. The desired behaviour is to write to a temporary file, then rename it (atomic operation) to the final destination. [pid 27743] open("00417.ROOIXY", O_RDWR|O_CREAT|O_EXCL, 0666) = 11 [pid 27743] close(11) = 0 [pid 27743] rename("00417.ROOIXY", "00417") = 0 3.GStreamer 1.8 writes directly to the final file, without a rename, exposing consumers to partially written or zero sized files. [pid 7439] open("00501", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 11 [pid 7439] close(11) = 0 [pid 7439] open("00502", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 11 [pid 7439] close(11) = 0 The multimedia:libs repo on OBS has GStreamer 1.10, which fixes this issue. Upstream bug report: https://bugzilla.gnome.org/show_bug.cgi?id=766990 Upstream fix: https://github.com/GStreamer/gst-plugins-good/commit/023998dd76b449440d267d689d578ae3e7a1bdbd The same problem exists with SLES12. SP1 (GStreamer 1.2) works, SP2 (GStreamer 1.8) has this bug.