--- Begin Message ---
Subject: |
fport_fill_input should handle EINTR |
Date: |
Wed, 28 Nov 2012 21:19:06 +1300 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/24.2 (gnu/linux) |
Guile version: 3.2.0-4-amd64
OS: Debian wheezy GNU/Linux, kernel 3.2.0-4-amd64
In a program that maintains a TCP connection with a polling loop, I have
defined a signal handler with the `sigaction' procedure to terminate the
connection gracefully. When the trapped signal is received (in this
case SIGINT) and the handler called, the following error message is
printed (full backtrace omitted):
ERROR: In procedure %read-line:
ERROR: In procedure fport_fill_input: Interrupted system call
I mentioned this on #guile on freenode and mark_weaver informed me that
I should be setting the SA_RESTART flag to avoid this problem, but that
there is a bug in Guile causing the error.
<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.
In short, I don't fully understand the innards to have an opinion on
whether this a bug or users should just set the SA_RESTART flag, bug
Mark assures me this is, indeed, a bug. Any disagreement, take it up
with him. ;)
Regards,
Aidan Gauland
--- End Message ---