[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#13018: fport_fill_input should handle EINTR
From: |
Ludovic Courtès |
Subject: |
bug#13018: fport_fill_input should handle EINTR |
Date: |
Thu, 29 Nov 2012 21:19:48 +0100 |
User-agent: |
Gnus/5.130005 (Ma Gnus v0.5) Emacs/24.2 (gnu/linux) |
Hi!
Aidan Gauland <address@hidden> 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’.