diff --git a/collects/frtime/frp-core.ss b/collects/frtime/frp-core.ss index 795181b8fe..8fbb7db0be 100644 --- a/collects/frtime/frp-core.ss +++ b/collects/frtime/frp-core.ss @@ -229,9 +229,16 @@ (iq-enqueue sig) sig)))) + (define ht (make-hash-table)) + (define (proc->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) (build-signal make-signal:unchanged thunk producers)) diff --git a/collects/frtime/lang-ext.ss b/collects/frtime/lang-ext.ss index d2b9231559..74f127203e 100644 --- a/collects/frtime/lang-ext.ss +++ b/collects/frtime/lang-ext.ss @@ -367,7 +367,6 @@ (current-milliseconds)) empty)] [head last] - [dummy 0] [producer (proc->signal (lambda () (let* ([now (current-milliseconds)] @@ -377,10 +376,9 @@ (< now (+ ms (cdr (mcar (mcdr head)))))) (car (mcar head)) (begin - (set! dummy consumer) ;; just to prevent GC (set! head (mcdr head)) (loop)))))))] - [consumer (proc->signal + [consumer (proc->signal/dont-gc-unless producer (lambda () (let* ([now (current-milliseconds)] [new (deep-value-now beh)] @@ -405,11 +403,8 @@ [last-time (current-milliseconds)] [last-val (value-now b)] [last-alarm 0] - [dummy 0] - [producer (proc->signal (lambda () - (set! dummy consumer) ;; just to prevent GC - accum))] - [consumer (proc->signal void b ms-b)]) + [producer (proc->signal (lambda () accum))] + [consumer (proc->signal/dont-gc-unless producer void b ms-b)]) (set-signal-thunk! consumer (lambda ()