• Sebastian Dröge's avatar
    filesink: Implement workaround for some (network) filesystems that spuriously... · eec9bd8d
    Sebastian Dröge authored
    filesink: Implement workaround for some (network) filesystems that spuriously return EACCES on write
    
    This seems to happen when another client is accessing the file at the
    same time, and retrying after a short amount of time solves it.
    
    Sometimes partial data is written at that point already but we have no
    idea how much it is, or if what was written is correct (it sometimes
    isn't) so we always first seek back to the current position and repeat
    the whole failed write.
    
    It happens at least on Linux and macOS on SMB/CIFS and NFS file systems.
    
    Between write attempts that failed with EACCES we wait 10ms, and after
    enough consecutive tries that failed with EACCES we simply time out.
    
    In theory a valid EACCES for files to which we simply have no access
    should've happened already during the call to open(), except for NFS
    (see open(2)).
    
    This can be enabled with the new max-transient-error-timeout property, and
    a new o-sync boolean property was added to open the file in O_SYNC mode
    as without that it's not guaranteed that we get EACCES for the actual
    writev() call that failed but might only get it at a later time.
    
    Fixes gstreamer/gstreamer#305
    eec9bd8d
Name
Last commit
Last update
common @ 59cb6781 Loading commit data...
data Loading commit data...
docs Loading commit data...
gst Loading commit data...
hooks Loading commit data...
libs Loading commit data...
m4 Loading commit data...
pkgconfig Loading commit data...
plugins Loading commit data...
po Loading commit data...
scripts Loading commit data...
tests Loading commit data...
tools Loading commit data...
.gitignore Loading commit data...
.gitlab-ci.yml Loading commit data...
.gitmodules Loading commit data...
AUTHORS Loading commit data...
COPYING Loading commit data...
ChangeLog Loading commit data...
MAINTAINERS Loading commit data...
Makefile.am Loading commit data...
NEWS Loading commit data...
README Loading commit data...
README.static-linking Loading commit data...
RELEASE Loading commit data...
TODO Loading commit data...
autogen.sh Loading commit data...
configure.ac Loading commit data...
gst-element-check-1.0.m4 Loading commit data...
gstreamer.doap Loading commit data...
meson.build Loading commit data...
meson_options.txt Loading commit data...
stamp.h.in Loading commit data...