From 1f2a09d31a9b1728848b3e0644a728bf8979517b Mon Sep 17 00:00:00 2001 From: Jay McCarthy Date: Tue, 17 Nov 2009 21:05:53 +0000 Subject: [PATCH] Use delay/sync svn: r16849 --- collects/web-server/private/mime-types.ss | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/collects/web-server/private/mime-types.ss b/collects/web-server/private/mime-types.ss index af0c01fb76..dc8ae9316d 100644 --- a/collects/web-server/private/mime-types.ss +++ b/collects/web-server/private/mime-types.ss @@ -1,6 +1,7 @@ #lang scheme/base (require scheme/contract - scheme/match) + scheme/match + scheme/promise) (require "util.ss" web-server/http) (provide/contract @@ -31,21 +32,13 @@ ;; 1. Can we determine the mime type based on file contents? ;; 2. Assuming that 7-bit ASCII is correct for mime-type (define (make-path->mime-type a-path) - ;; it would be nice to just use delay/force -- but this can be called by - ;; multiple threads at the same time, causing a "reentrant promise" error. - (define sema (make-semaphore 1)) - (define MIME-TYPE-TABLE #f) + (define MIME-TYPE-TABLE + (delay/sync + (read-mime-types a-path))) (lambda (path) (match (path->bytes path) [(regexp #rx#".*\\.([^\\.]*$)" (list _ sffx)) - (hash-ref (or MIME-TYPE-TABLE - (dynamic-wind - (lambda () (semaphore-wait sema)) - (lambda () (or MIME-TYPE-TABLE ; maybe already read - (begin (set! MIME-TYPE-TABLE - (read-mime-types a-path)) - MIME-TYPE-TABLE))) - (lambda () (semaphore-post sema)))) + (hash-ref (force MIME-TYPE-TABLE) (lowercase-symbol! sffx) TEXT/HTML-MIME-TYPE)] - [_ TEXT/HTML-MIME-TYPE]))) + [_ TEXT/HTML-MIME-TYPE]))) \ No newline at end of file