Fix deref of delays

This commit is contained in:
Justin Ethier 2019-07-11 18:11:08 -04:00
parent 0b1c4662fb
commit c2757d2fe6

View file

@ -27,8 +27,10 @@
;; Delays ;; Delays
make-shared-delay make-shared-delay
shared-delay shared-delay
shared-delay?
;; Promises ;; Promises
make-shared-promise make-shared-promise
shared-promise?
deliver deliver
;; Futures ;; Futures
future? future?
@ -213,15 +215,12 @@
(when (not (shared-delay? d)) (when (not (shared-delay? d))
(error "Expected future but received" d)) (error "Expected future but received" d))
(mutex-lock! (sd:lock d)) (mutex-lock! (sd:lock d))
(cond (when (not (sd:done d))
((sd:done d)
(sd:value d))
(else
(sd:set-value! d (sd:set-value! d
(make-shared ((sd:value d)))) ;; Exec thunk and store result (make-shared ((sd:value d)))) ;; Exec thunk and store result
(sd:set-done! d #t))) (sd:set-done! d #t))
(mutex-unlock! (sd:lock d)) (mutex-unlock! (sd:lock d))
) (sd:value d))
(define (shared-delay-realized? obj) (define (shared-delay-realized? obj)
(let ((rv #f)) (let ((rv #f))