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). > #ifdef FSYNC_NEEDS_RESTART The wrapper should apply to all platforms. NFS (and presumably other network FSes) can be mounted with interrupts enabled. > #undef fsync /* we'd define to git_fsync() in a header file */ > static int git_fsync(int fd) > { > int ret; > while ((ret = fsync(fd)) < 0 && errno == EINTR) > ; /* try again */ > return ret; > } Looks fine.