vim-patch:8.2.3509: undo file is not synced

Problem:    Undo file is not synced. (Sami Farin)
Solution:   Sync the undo file if 'fsync' is set. (Christian Brabandt,
            closes vim/vim#8879, closes vim/vim#8920)

340dd0fbe4

Co-authored-by: Bram Moolenaar <Bram@vim.org>
(cherry picked from commit ff5b103ac7)
This commit is contained in:
zeertzjq
2023-04-28 20:34:48 +08:00
committed by github-actions[bot]
parent fb73bfd667
commit 5c2f442a74
2 changed files with 6 additions and 2 deletions

View File

@@ -2768,8 +2768,8 @@ A jump table for the options with a short description can be found at |Q_op|.
'fsync' 'fs' boolean (default off) 'fsync' 'fs' boolean (default off)
global global
When on, the OS function fsync() will be called after saving a file When on, the OS function fsync() will be called after saving a file
(|:write|, |writefile()|, …), |swap-file| and |shada-file|. This (|:write|, |writefile()|, …), |swap-file|, |undo-persistence| and |shada-file|.
flushes the file to disk, ensuring that it is safely written. This flushes the file to disk, ensuring that it is safely written.
Slow on some systems: writing buffers, quitting Nvim, and other Slow on some systems: writing buffers, quitting Nvim, and other
operations may sometimes take a few seconds. operations may sometimes take a few seconds.

View File

@@ -1333,6 +1333,10 @@ void u_write_undo(const char *const name, const bool forceit, buf_T *const buf,
} }
#endif #endif
if (p_fs && fflush(fp) == 0 && os_fsync(fd) != 0) {
write_ok = false;
}
write_error: write_error:
fclose(fp); fclose(fp);
if (!write_ok) { if (!write_ok) {