GNU bug report logs -
#13018
fport_fill_input should handle EINTR
Previous Next
Full log
Message #14 received at 13018 <at> debbugs.gnu.org (full text, mbox):
On Thu 29 Nov 2012 21:19, ludo <at> gnu.org (Ludovic Courtès) writes:
> Aidan Gauland <aidalgol <at> 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/
This bug report was last modified 11 years and 346 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.