On Wed, Jun 02, 2021 at 08:11:50PM +0000, Eric Wong wrote: > Jeff King <peff@xxxxxxxx> wrote: > > And so when he gets this error: > > > > fatal: fsync error on '.git/objects/pack/tmp_pack_NkPgqN': Interrupted system call > > > > presumably we were in fsync() when the signal arrived, and unlike most > > other platforms, the call needs to be restarted manually (even though we > > set up the signal with SA_RESTART). I'm not sure if this violates POSIX > > or not (I couldn't find a definitive answer to the set of interruptible > > functions in the standard). But either way, the workaround is probably > > something like: > > "man 3posix fsync" says EINTR is allowed ("manpages-posix-dev" > package in Debian non-free). Ah, thanks. Linux's fsync(3) doesn't mention it, and nor does it appear in the discussion of interruptible calls in signals(7). So I was looking for a POSIX equivalent of that signals manpage but couldn't find one. :) > > #ifdef FSYNC_NEEDS_RESTART > > The wrapper should apply to all platforms. NFS (and presumably > other network FSes) can be mounted with interrupts enabled. I don't mind that, as the wrapper is pretty low-cost (and one less Makefile knob is nice). If it's widespread, though, I find it curious that nobody has run into it before now. -Peff