Fix sync_all on macos/ios

sync_all should flush all metadata in macos/ios, so it should call
fcntl with the F_FULLFSYNC flag as sync_data does.

Fixes #55920
This commit is contained in:
David Vázquez Púa 2019-04-19 20:42:52 +02:00
parent a2bbf7deba
commit d602a6b942

View File

@ -526,8 +526,15 @@ impl File {
}
pub fn fsync(&self) -> io::Result<()> {
cvt_r(|| unsafe { libc::fsync(self.0.raw()) })?;
Ok(())
cvt_r(|| unsafe { os_fsync(self.0.raw()) })?;
return Ok(());
#[cfg(any(target_os = "macos", target_os = "ios"))]
unsafe fn os_fsync(fd: c_int) -> c_int {
libc::fcntl(fd, libc::F_FULLFSYNC)
}
#[cfg(not(any(target_os = "macos", target_os = "ios")))]
unsafe fn os_fsync(fd: c_int) -> c_int { libc::fsync(fd) }
}
pub fn datasync(&self) -> io::Result<()> {