...
original commit: ed17cf2e0383ed88cba8bfd8ab9c3d272424ad5f
This commit is contained in:
parent
2924bf0d2d
commit
96ad62b6ee
|
@ -1,33 +1,37 @@
|
|||
(printf "mred:creating thread~n")
|
||||
(thread
|
||||
(letrec ([restart
|
||||
(lambda ()
|
||||
(printf "mred:initializing loop~n")
|
||||
(let*-values ([(in out) (tcp-connect "localhost" (load-relative "receive-sexps-port.ss"))]
|
||||
[(continue) (make-semaphore 0)]
|
||||
[(error) #f]
|
||||
[(answer) (void)])
|
||||
(printf "mred:made connection~n")
|
||||
(let loop ()
|
||||
(let ([sexp (read in)])
|
||||
(if (eof-object? sexp)
|
||||
(begin
|
||||
(close-input-port in)
|
||||
(close-output-port out)
|
||||
(exit))
|
||||
(begin
|
||||
(queue-callback (lambda ()
|
||||
(set! error #f)
|
||||
(with-handlers ([(lambda (x) #t)
|
||||
(lambda (exn)
|
||||
(set! error exn))])
|
||||
(set! answer (eval sexp)))
|
||||
(semaphore-post continue)))
|
||||
(semaphore-wait continue)
|
||||
(write
|
||||
(if error
|
||||
(list 'error (exn-message error))
|
||||
(list 'normal answer))
|
||||
out)
|
||||
(loop)))))))])
|
||||
restart))
|
||||
(with-handlers ([(lambda (x) #t)
|
||||
(lambda (exn)
|
||||
(fprintf (current-error-port) "mred: ")
|
||||
(raise exn))])
|
||||
(letrec ([restart
|
||||
(lambda ()
|
||||
(printf "mred:initializing loop~n")
|
||||
(let*-values ([(in out) (tcp-connect "localhost" (load-relative "receive-sexps-port.ss"))]
|
||||
[(continue) (make-semaphore 0)]
|
||||
[(error) #f]
|
||||
[(answer) (void)])
|
||||
(printf "mred:made connection~n")
|
||||
(let loop ()
|
||||
(let ([sexp (read in)])
|
||||
(if (eof-object? sexp)
|
||||
(begin
|
||||
(close-input-port in)
|
||||
(close-output-port out)
|
||||
(exit))
|
||||
(begin
|
||||
(queue-callback (lambda ()
|
||||
(set! error #f)
|
||||
(with-handlers ([(lambda (x) #t)
|
||||
(lambda (exn)
|
||||
(set! error exn))])
|
||||
(set! answer (eval sexp)))
|
||||
(semaphore-post continue)))
|
||||
(semaphore-wait continue)
|
||||
(write
|
||||
(if error
|
||||
(list 'error (exn-message error))
|
||||
(list 'normal answer))
|
||||
out)
|
||||
(loop)))))))])
|
||||
restart)))
|
||||
|
|
Loading…
Reference in New Issue
Block a user