]> granicus.if.org Git - fcron/commitdiff
file save: sync data before renaming file for extra robustness
authorThibault Godouet <fcron@free.fr>
Sun, 13 Apr 2014 09:53:41 +0000 (10:53 +0100)
committerThibault Godouet <fcron@free.fr>
Sun, 13 Apr 2014 09:53:41 +0000 (10:53 +0100)
save.c

diff --git a/save.c b/save.c
index 7b5299ce7751fa0c7395e341c38e096c6dfe43c9..7084c4e3295c2bb7508621a87c81aa7086355b11 100644 (file)
--- a/save.c
+++ b/save.c
@@ -306,6 +306,16 @@ write_file_to_disk(int fd, struct cf_t *file, time_t time_date)
         return ERR;
     }
 
+    /* Make sure the data is fully synchronize to disk before files are renamed 
+     * to their final destination.
+     * This is to avoid cases where the file name (meta-data) would be updated,
+     * and there is a crash before the data is fully written: not sure if that
+     * is possible, but better safe than sorry! */
+    if (fdatasync(fd) < 0) {
+        error_e("could not fdatasync() %s's fcrontab", file->cf_user);
+        return ERR;
+    }
+
     return OK;
 }