Revert "db: use channel instead of semaphore + result variable"
Using a sync. channel breaks kill-safety.
This reverts commit 8363db9258
.
This commit is contained in:
parent
d953bc27ba
commit
ecb88ffd45
|
@ -38,18 +38,20 @@
|
|||
|
||||
(define/private (call* proc chan as-evt?)
|
||||
(thread-resume mthread (current-thread))
|
||||
(let* ([return-channel (make-channel)]
|
||||
(let* ([result #f]
|
||||
[sema (make-semaphore 0)]
|
||||
[proc (lambda ()
|
||||
(channel-put return-channel
|
||||
(with-handlers ([(lambda (e) #t)
|
||||
(lambda (e) (cons 'exn e))])
|
||||
(cons 'values (call-with-values proc list)))))]
|
||||
(set! result
|
||||
(with-handlers ([(lambda (e) #t)
|
||||
(lambda (e) (cons 'exn e))])
|
||||
(cons 'values (call-with-values proc list))))
|
||||
(semaphore-post sema))]
|
||||
[handler
|
||||
(lambda (_evt)
|
||||
(let ([result (channel-get return-channel)])
|
||||
(case (car result)
|
||||
((values) (apply values (cdr result)))
|
||||
((exn) (raise (cdr result))))))])
|
||||
(semaphore-wait sema)
|
||||
(case (car result)
|
||||
((values) (apply values (cdr result)))
|
||||
((exn) (raise (cdr result)))))])
|
||||
(if as-evt?
|
||||
(wrap-evt (channel-put-evt chan proc) handler)
|
||||
(begin (channel-put chan proc)
|
||||
|
|
Loading…
Reference in New Issue
Block a user