Hi!
Aidan Gauland <[email protected]> skribis:
> <mark_weaver> fport_fill_input should handle an EINTR error from 'read',
> and restart the read if that happens.
>
> <mark_weaver> by default on some systems, signals cause 'read', 'write',
> and many other system calls to abort and return an EINTR
> error.
>
> <mark_weaver> basically, at the POSIX level, every call to 'read' has to
> be within a little loop that takes care of the EINTR
> problem.
‘fport_fill_input’ does this:
SCM_SYSCALL (count = read (fp->fdes, pt->read_buf, pt->read_buf_size));
and SCM_SYSCALL does that:
# ifdef EINTR
# if (EINTR > 0)
# define SCM_SYSCALL(line) \
do \
{ \
errno = 0; \
line; \
if (errno == EINTR) \
{ \
SCM_ASYNC_TICK; \
continue; \
} \
} \
while(0)
# endif /* (EINTR > 0) */
# endif /* def EINTR */
On GNU/Linux, I see:
$ echo '#include <errno.h>' | gcc -E -dM - | grep EINTR
#define EINTR 4
So AFAICS, the EINTR case is taken care of. Or am I missing something?
Do you have a reduced test case?
Thanks,
Ludo’.