Hi Ludo, > On the Guile side, we’ll have to push the fix for > <https://bugs.gnu.org/30368>.
Can't think of a way to test select. But can think of a way to test pselect: Excuse the C: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/select.h> #include <signal.h> static void dummy(int signum) { } int main() { int fds[2]; struct sigaction sa = { .sa_handler = dummy, .sa_flags = 0, }; sigemptyset(&sa.sa_mask); pipe(fds); /* Make sure we don't miss it */ sigsetmask(sigmask(SIGCHLD)); /* Make sure we handle it once we DO get it (after unblocking it :P) */ sigaction(SIGCHLD, &sa, NULL); if (fork() == 0) { _exit(0); /* Cause SIGCHLD (to be at least pending) in the parent. */ } else { close(fds[0]); fd_set read_set; fd_set write_set; fd_set except_set; sigset_t sigmask; int rc; FD_ZERO(&read_set); FD_ZERO(&write_set); FD_SET(fds[1], &write_set); FD_ZERO(&except_set); sigemptyset(&sigmask); /* unblock SIGCHLD */ rc = pselect(fds[0] + 1, &read_set, &write_set, &except_set, NULL, &sigmask); if (rc == -1) { perror("select"); } else if (rc == 0) { printf("ZERO\n"); } else { printf("N\n"); } } return 0; }