|
| From: | Tobia Conforto |
| Subject: | Re: [Chicken-users] Threads and dynamic-wind still problematic |
| Date: | Sun, 8 Mar 2009 23:04:58 +0100 |
Peter Bex wrote:
Yup, thanks for asking him. It still sucks, though ;)
It does. This is one way to solve it: #;1> (use srfi-18) ; loading library srfi-18 ... #;2> (define exception-protect ---> (let ((original-exception-handler (current-exception-handler))) ---> (lambda (thunk) ---> (lambda ()---> (with-exception-handler original-exception-handler thunk)))))
#;3> (define (test)
---> (dynamic-wind
---> (lambda ()
---> (print "BEFORE"))
---> (lambda ()
---> (error "die!")
---> (print "NOT PRINTING"))
---> (lambda ()
---> (print "AFTER"))))
#;4> (thread-join! (thread-start! (exception-protect test)))
BEFORE
Error: die!
Call history:
.
.
.
AFTER
#;4>
The key is defining exception-protect in the primordial thread. Then
you can use it wherever you need it.
I'm not knowledgeable enough to wager what kinds of problems it may cause... and I have a feeling it may cause lots! Or maybe not. So use it at your own risk.
-Tobia
| [Prev in Thread] | Current Thread | [Next in Thread] |