summaryrefslogtreecommitdiffhomepage
path: root/dbutil.c
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2016-11-19 00:31:21 +0800
committerMatt Johnston <matt@ucc.asn.au>2016-11-19 00:31:21 +0800
commit5d2cb48f463c328e0405fd8b675e1f85111fbd59 (patch)
treea4c73a9564540fe80168f17c48ec5146927e4842 /dbutil.c
parent9f674382d55cb3b8effcb53cf8d7c2d368675f3d (diff)
Use atomic key generation in all cases
Diffstat (limited to 'dbutil.c')
-rw-r--r--dbutil.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/dbutil.c b/dbutil.c
index 22d798b..830e8d2 100644
--- a/dbutil.c
+++ b/dbutil.c
@@ -681,4 +681,21 @@ time_t monotonic_now() {
return time(NULL);
}
+void fsync_parent_dir(const char* fn) {
+#ifdef HAVE_LIBGEN_H
+ char *fn_dir = m_strdup(fn);
+ char *dir = dirname(fn_dir);
+ int dirfd = open(dir, O_RDONLY);
+
+ if (dirfd != -1) {
+ if (fsync(dirfd) != 0) {
+ TRACE(("fsync of directory %s failed: %s", dir, strerror(errno)))
+ }
+ m_close(dirfd);
+ } else {
+ TRACE(("error opening directory %s for fsync: %s", dir, strerror(errno)))
+ }
+ free(fn_dir);
+#endif
+}