On Thu 29 Nov 2012 21:19, l...@gnu.org (Ludovic Courtès) writes: > 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 */
I get the feeling the EINTR is coming from somewhere else -- like the ASYNC_TICK. The sigaction could cause a thunk to run there. Aidan, do you have a test case? Andy -- http://wingolog.org/