forward port fix from r8100/05/06 to trunk

svn: r8107
This commit is contained in:
Greg Cooper 2007-12-22 17:55:57 +00:00
parent b4681b4ca5
commit 58c95cf5c3
2 changed files with 10 additions and 8 deletions

View File

@ -229,9 +229,16 @@
(iq-enqueue sig) (iq-enqueue sig)
sig)))) sig))))
(define ht (make-hash-table))
(define (proc->signal thunk . producers) (define (proc->signal thunk . producers)
(build-signal make-signal thunk producers)) (build-signal make-signal thunk producers))
(define (proc->signal/dont-gc-unless other-val thunk . producers)
(let ([result (build-signal make-signal thunk producers)])
(hash-table-put! ht other-val result)
result))
(define (proc->signal:unchanged thunk . producers) (define (proc->signal:unchanged thunk . producers)
(build-signal make-signal:unchanged thunk producers)) (build-signal make-signal:unchanged thunk producers))

View File

@ -367,7 +367,6 @@
(current-milliseconds)) (current-milliseconds))
empty)] empty)]
[head last] [head last]
[dummy 0]
[producer (proc->signal [producer (proc->signal
(lambda () (lambda ()
(let* ([now (current-milliseconds)] (let* ([now (current-milliseconds)]
@ -377,10 +376,9 @@
(< now (+ ms (cdr (mcar (mcdr head)))))) (< now (+ ms (cdr (mcar (mcdr head))))))
(car (mcar head)) (car (mcar head))
(begin (begin
(set! dummy consumer) ;; just to prevent GC
(set! head (mcdr head)) (set! head (mcdr head))
(loop)))))))] (loop)))))))]
[consumer (proc->signal [consumer (proc->signal/dont-gc-unless producer
(lambda () (lambda ()
(let* ([now (current-milliseconds)] (let* ([now (current-milliseconds)]
[new (deep-value-now beh)] [new (deep-value-now beh)]
@ -405,11 +403,8 @@
[last-time (current-milliseconds)] [last-time (current-milliseconds)]
[last-val (value-now b)] [last-val (value-now b)]
[last-alarm 0] [last-alarm 0]
[dummy 0] [producer (proc->signal (lambda () accum))]
[producer (proc->signal (lambda () [consumer (proc->signal/dont-gc-unless producer void b ms-b)])
(set! dummy consumer) ;; just to prevent GC
accum))]
[consumer (proc->signal void b ms-b)])
(set-signal-thunk! (set-signal-thunk!
consumer consumer
(lambda () (lambda ()