From 8363db9258106aacf2d33694e9e49cd8e7da5cd5 Mon Sep 17 00:00:00 2001 From: Ryan Culpepper Date: Sat, 25 Aug 2012 17:14:56 -0400 Subject: [PATCH] db: use channel instead of semaphore + result variable --- collects/db/private/generic/connect-util.rkt | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/collects/db/private/generic/connect-util.rkt b/collects/db/private/generic/connect-util.rkt index f9212d35e0..56225dd982 100644 --- a/collects/db/private/generic/connect-util.rkt +++ b/collects/db/private/generic/connect-util.rkt @@ -38,20 +38,18 @@ (define/private (call* proc chan as-evt?) (thread-resume mthread (current-thread)) - (let* ([result #f] - [sema (make-semaphore 0)] + (let* ([return-channel (make-channel)] [proc (lambda () - (set! result - (with-handlers ([(lambda (e) #t) - (lambda (e) (cons 'exn e))]) - (cons 'values (call-with-values proc list)))) - (semaphore-post sema))] + (channel-put return-channel + (with-handlers ([(lambda (e) #t) + (lambda (e) (cons 'exn e))]) + (cons 'values (call-with-values proc list)))))] [handler (lambda (_evt) - (semaphore-wait sema) - (case (car result) - ((values) (apply values (cdr result))) - ((exn) (raise (cdr result)))))]) + (let ([result (channel-get return-channel)]) + (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)