neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit 715587f8e44e941ece6f17eb77620fd1b4719496
parent 4f235e3cafba5dc305aa0be33cdec093e9c5a92d
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Fri, 28 Apr 2023 21:07:00 +0800

vim-patch:8.2.3509: undo file is not synced (#23371)

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)

https://github.com/vim/vim/commit/340dd0fbe462a15a9678cfba02085b4adcc45f02

Co-authored-by: Bram Moolenaar <Bram@vim.org>
Diffstat:
Mruntime/doc/options.txt | 4++--
Msrc/nvim/undo.c | 4++++
2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt @@ -2774,8 +2774,8 @@ A jump table for the options with a short description can be found at |Q_op|. 'fsync' 'fs' boolean (default off) global When on, the OS function fsync() will be called after saving a file - (|:write|, |writefile()|, …), |swap-file| and |shada-file|. This - flushes the file to disk, ensuring that it is safely written. + (|:write|, |writefile()|, …), |swap-file|, |undo-persistence| and |shada-file|. + This flushes the file to disk, ensuring that it is safely written. Slow on some systems: writing buffers, quitting Nvim, and other operations may sometimes take a few seconds. diff --git a/src/nvim/undo.c b/src/nvim/undo.c @@ -1333,6 +1333,10 @@ void u_write_undo(const char *const name, const bool forceit, buf_T *const buf, } #endif + if (p_fs && fflush(fp) == 0 && os_fsync(fd) != 0) { + write_ok = false; + } + write_error: fclose(fp); if (!write_ok) {