unofficial mirror of guile-user@gnu.org 
 help / color / mirror / Atom feed
* A timely question on interrupted system calls
@ 2013-07-11  6:45 mark.d.witmer
  2013-07-11 12:07 ` Ludovic Courtès
  0 siblings, 1 reply; 3+ messages in thread
From: mark.d.witmer @ 2013-07-11  6:45 UTC (permalink / raw)
  To: guile-user


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



^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-07-12  4:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-07-11  6:45 A timely question on interrupted system calls mark.d.witmer
2013-07-11 12:07 ` Ludovic Courtès
2013-07-12  4:26   ` mark.d.witmer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).