From ecb88ffd45190cd3b11e709be58fdd47ad8c6b0c Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Tue, 28 Aug 2012 22:04:05 -0400 Subject: [PATCH] Revert "db: use channel instead of semaphore + result variable" Using a sync. channel breaks kill-safety. This reverts commit 8363db9258106aacf2d33694e9e49cd8e7da5cd5. --- collects/db/private/generic/connect-util.rkt | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/collects/db/private/generic/connect-util.rkt b/collects/db/private/generic/connect-util.rkt index 56225dd982..f9212d35e0 100644 --- a/collects/db/private/generic/connect-util.rkt +++ b/collects/db/private/generic/connect-util.rkt @@ -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)