Subject: Re: bug#44320: [PATH] [27.1] Make sure send-string-to-terminal send all contents

From: Eli Zaretskii <[email-masked]>
Date: Mon, 02 Nov 2020 18:14:56 +0200

> From: Andreas Schwab <[email-masked]>
> Cc: LinSun <[email-masked]>,  [email-masked],  [email-masked],
>   [email-masked]
> Date: Mon, 02 Nov 2020 16:49:49 +0100
> 
> >> write(6, "…", 256) = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
> >
> > Thanks.
> >
> > I don't think I know how to interpret this trace, or understand the
> > significance of ERESTARTSYS.
> 
> It is translated to EINTR on signal handler return:
> 
> rt_sigreturn({mask=[]})                 = -1 EINTR (Interrupted system call)
> 
> Outside of strace, ERESTARTSYS is never observed by user-space.

So you are saying that the call to 'write' issued by 'fwrite' or
'fflush' was interrupted by SIGIO, and that is why it didn't write all
of its data?  IOW, the size of the string passed to 'fwrite' has no
real significance here, and instead the problem is the signal?

If so, is it normal for 'fwrite'/'fflush' to punt instead of
continuing its 'write' loop upon receiving EINTR?  I can understand
why we need a loop when we call 'write' directly, but I'd expect
'fwrite' to do that internally.  Am I naïve?

Thanks.