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

From: Junio C Hamano <[email-masked]>
Date: Fri, 04 Jun 2021 14:12:10 +0900

Jeff King <[email-masked]> writes:

> One brief aside: I'm still not entirely convinced that NonStop isn't
> violating POSIX. Yes, as Eric noted, fsync() is allowed to return EINTR.
> But should it do so when the signal it got was set up with SA_RESTART?
>
> The sigaction(3posix) page says:
>
>      SA_RESTART   This flag affects the behavior of interruptible functions;
> 		  that is, those specified to fail with errno set to
> 		  [EINTR]. If set, and a function specified as
> 		  interruptible is interrupted by this signal, the
> 		  function shall restart and shall not fail with [EINTR]
> 		  unless otherwise specified. [...]
>
> and I could not find anywhere that it is "otherwise specified" for
> fsync(). Of course, whatever POSIX says, if NonStop needs this
> workaround, we should provide it. But this may explain why we never saw
> it on other systems.

Yeah, I think all of the above makes sense.

> It also means it's less important for this workaround to kick in
> everywhere. But given how low-cost it is, I'm just as happy to avoid
> having a separate knob to enable it.

Yes, any caller who cares about the result of fsync() is willing to
wait, and on a well benaved system, we would never see EINTR so the
loop won't iterate.  Having to carry just a handful of extra bytes
in ICache in a codepath that is not performance critical is probably
an acceptable cost for simpler code.