I'm sending an updated patch. On Sun, Sep 23, 2018 at 02:46:51PM +0000, Daniel Shahaf wrote: > fsync() is in POSIX. I assume we can just call it, but if somebody complains > we'll need to use an HAVE_FSYNC guard. I don't know how to add a HAVE_FSYNC macro to the build system, sorry. > > +++ b/Src/hist.c > > @@ -2933,6 +2933,9 @@ savehistfile(char *fn, int err, int writeflags) > > lasthist.text = ztrdup(start); > > } > > } > > + fflush(out); /* need to flush before fsync */ > > Isn't the fflush() on line 2927 sufficient? (Even if it isn't, I would have > expected a ret>=0 guard around this call.) It should call write(2) to write out the buffered data. Then the kernel can fsync the data to disk. A guard has been added. > > + if (fsync(fileno(out)) < 0 && ret >= 0) > > + ret = -1; > > fileno() can return -1. It shouldn't matter, fsync will return EBADF for -1. Other parts of the code don't check for this either, and I can't think a case when fileno would fail after so many successful I/O operations on it (corrupted memory?) > Shouldn't the ret>=0 check happen before the calls to fileno() and fsync()? Yes, I've changed that. -- Best regards, lilydjwg