Hi! Aidan Gauland <aidal...@no8wireless.co.nz> 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’.