I followed the thread a few days ago on @guile-dev about SCM_SYSCALL and was grateful I hadn't run into any problems with it. But now I have!
I'm working with an event loop for my X bindings that polls a socket for availablity using `select'. Meanwhile, I have a repl server running in another thread. When something connects to the server, the call to `select' get interrupted and throws a system error. In the following code the catch expression doesn't catch the system error: (define (file-ready? fd) (memq fd (car (catch 'system-error (lambda () (select (list fd) '() '() 0 16667)) (lambda args (if (= (system-error-errno args) EINTR) '(() () ()) ;; Assume it isn't available for now (apply throw args))))))) I gathered from what I read that the error is getting handled in a system async, which could explain why my catch expression doesn't see it. I also tried a couple versions of `sigaction' without any luck: (sigaction SIGINT (lambda (signum) #t) SA_RESTART) and (sigaction SIGINT #f SA_RESTART) It'd be fine if it automatically retried instead of returning the empty lists. Any ideas? -- Mark Witmer