Subject: bug#18988: select failure with EINTR in guile-2.0.11

From: Chris Vine <[email-masked]>
Date: Fri, 7 Nov 2014 17:18:09 +0000

A program of mine using guile-2.0.11 fails whenever a signal occurs
while a call to select is blocking, with this error:

  Backtrace:
  In ice-9/boot-9.scm:
   157: 9 [catch #t #<catch-closure 820f0a0> ...]
  In unknown file:
     ?: 8 [apply-smob/1 #<catch-closure 820f0a0>]
  In ice-9/boot-9.scm:
    63: 7 [call-with-prompt prompt0 ...]
  In ice-9/eval.scm:
   432: 6 [eval # #]
  In ice-9/boot-9.scm:
  2401: 5 [save-module-excursion #<procedure 821fd00 at ice-9/boot-9.scm:4045:3 ()>]
  4052: 4 [#<procedure 821fd00 at ice-9/boot-9.scm:4045:3 ()>]
  In unknown file:
     ?: 3 [load-compiled/vm "/home/chris/.cache/guile/ccache/2.0-LE-4-2.0/home/chris/src/event-loop.scm.go"]
  In /home/chris/src/./event-loop.scm:
   258: 2 [#<procedure 8767350 ()>]
    68: 1 [event-loop-run #<r6rs:record:event-loop>]
  In unknown file:
     ?: 0 [select (5) () () #<undefined> #<undefined>]

  ERROR: In procedure select:
  ERROR: In procedure select: Interrupted system call

According to the mailing list exchange at
http://lists.gnu.org/archive/html/guile-rpc-bugs/2014-05/msg00001.html ,
this was fixed in guile >= 2.0.10.  However it is still present (or back
as a regression) in guile-2.0.11.

The EINTR-safe wrapper mentioned in the mailing list exchange fixes it
for me in user code, but it would be nice if it were not necessary and
guile handled EINTR itself.