diff options
| -rw-r--r-- | tdutils/td/utils/port/FileFd.cpp | 10 | ||||
| -rw-r--r-- | tdutils/td/utils/port/FileFd.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/tdutils/td/utils/port/FileFd.cpp b/tdutils/td/utils/port/FileFd.cpp index 86d57c5c9..144c6fbc9 100644 --- a/tdutils/td/utils/port/FileFd.cpp +++ b/tdutils/td/utils/port/FileFd.cpp @@ -635,6 +635,16 @@ Status FileFd::sync() { return Status::OK(); } +Status FileFd::sync_barrier() { + CHECK(!empty()); +#if TD_DARWIN && defined(F_BARRIERFSYNC) + if (detail::skip_eintr([&] { return fcntl(get_native_fd().fd(), F_BARRIERFSYNC); }) == -1) { + return Status::OK(); + } +#endif + return sync(); +} + Status FileFd::seek(int64 position) { CHECK(!empty()); #if TD_PORT_POSIX diff --git a/tdutils/td/utils/port/FileFd.h b/tdutils/td/utils/port/FileFd.h index 69e3c47d3..cb632b825 100644 --- a/tdutils/td/utils/port/FileFd.h +++ b/tdutils/td/utils/port/FileFd.h @@ -62,6 +62,7 @@ class FileFd { Result<Stat> stat() const; Status sync() TD_WARN_UNUSED_RESULT; + Status sync_barrier() TD_WARN_UNUSED_RESULT; Status seek(int64 position) TD_WARN_UNUSED_RESULT; |
