aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--tdutils/td/utils/port/FileFd.cpp10
-rw-r--r--tdutils/td/utils/port/FileFd.h1
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;