Subject: Re: [ANNOUNCE] Git v2.32.0-rc3 - t5300 Still Broken on NonStop ia64/x86

From: Eric Wong <[email-masked]>
Date: Wed, 2 Jun 2021 20:11:50 +0000

Jeff King <[email-masked]> 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.