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