diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-10-14 17:52:23 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-10-14 17:52:23 +0100 |
commit | 340dd0fbe462a15a9678cfba02085b4adcc45f02 (patch) | |
tree | c306b977fa7adba5010d56cedd4cfc530f77349f | |
parent | 051a8a375f8fb6a931fbc5ccca714a200d9b327f (diff) | |
download | vim-git-340dd0fbe462a15a9678cfba02085b4adcc45f02.tar.gz |
patch 8.2.3509: undo file is not syncedv8.2.3509
Problem: Undo file is not synced. (Sami Farin)
Solution: Sync the undo file if 'fsync' is set. (Christian Brabandt,
closes #8879, closes #8920)
-rw-r--r-- | runtime/doc/options.txt | 4 | ||||
-rw-r--r-- | src/undo.c | 5 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 9 insertions, 2 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index 6bf0a5820..91df5df2e 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3610,8 +3610,8 @@ A jump table for the options with a short description can be found at |Q_op|. systems without an fsync() implementation, this variable is always off. Also see 'swapsync' for controlling fsync() on swap files. - 'fsync' also applies to |writefile()|, unless a flag is used to - overrule it. + 'fsync' also applies to |writefile()| (unless a flag is used to + overrule it) and when writing undo files (see |undo-persistence|). This option cannot be set from a |modeline| or in the |sandbox|, for security reasons. diff --git a/src/undo.c b/src/undo.c index 814130108..033fa6ea0 100644 --- a/src/undo.c +++ b/src/undo.c @@ -1786,6 +1786,11 @@ u_write_undo( write_ok = FALSE; #endif +#if defined(UNIX) && defined(HAVE_FSYNC) + if (p_fs && fflush(fp) == 0 && vim_fsync(fd) != 0) + write_ok = FALSE; +#endif + write_error: fclose(fp); if (!write_ok) diff --git a/src/version.c b/src/version.c index 2125972bb..31f00157b 100644 --- a/src/version.c +++ b/src/version.c @@ -758,6 +758,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 3509, +/**/ 3508, /**/ 3507, |