Make package-change-handler properly reloadable and avoid leak of processes (!)
This commit is contained in:
parent
db021c9551
commit
2d55b78b83
|
@ -234,7 +234,8 @@
|
||||||
(if (not (package-change-handler-thread))
|
(if (not (package-change-handler-thread))
|
||||||
(begin (sleep 0.5)
|
(begin (sleep 0.5)
|
||||||
(retry))
|
(retry))
|
||||||
(thread-send (package-change-handler-thread) (list completion-ch package-name)))))
|
(thread-send (package-change-handler-thread)
|
||||||
|
(list 'package-changed completion-ch package-name)))))
|
||||||
|
|
||||||
(define (manager-rpc . request)
|
(define (manager-rpc . request)
|
||||||
(define ch (make-channel))
|
(define ch (make-channel))
|
||||||
|
|
36
src/site.rkt
36
src/site.rkt
|
@ -1259,28 +1259,40 @@
|
||||||
(set-package-external-information! package-name external-information))
|
(set-package-external-information! package-name external-information))
|
||||||
|
|
||||||
(define (rerender-all!)
|
(define (rerender-all!)
|
||||||
(for ((p (all-package-names)))
|
(thread-send (package-change-handler-thread) 'rerender-all!))
|
||||||
(update-external-package-information! p)
|
|
||||||
(static-render! package-page (symbol->string p)))
|
|
||||||
(static-render! main-page))
|
|
||||||
|
|
||||||
(define (package-change-handler)
|
(define (package-change-handler index-rerender-needed? pending-completions)
|
||||||
(let loop ((index-rerender-needed? #f)
|
|
||||||
(pending-completions '()))
|
|
||||||
(sync/timeout (and index-rerender-needed?
|
(sync/timeout (and index-rerender-needed?
|
||||||
(lambda ()
|
(lambda ()
|
||||||
(static-render! main-page)
|
(static-render! main-page)
|
||||||
(for ((completion-ch pending-completions))
|
(for ((completion-ch pending-completions))
|
||||||
(channel-put completion-ch (void)))
|
(channel-put completion-ch (void)))
|
||||||
(loop #f '())))
|
(package-change-handler #f '())))
|
||||||
(handle-evt (thread-receive-evt)
|
(handle-evt (thread-receive-evt)
|
||||||
(lambda (_)
|
(lambda (_)
|
||||||
(match (thread-receive)
|
(match (thread-receive)
|
||||||
[(list completion-ch package-name)
|
['upgrade
|
||||||
|
(package-change-handler index-rerender-needed?
|
||||||
|
pending-completions)]
|
||||||
|
['rerender-all!
|
||||||
|
(log-info "rerender-all!")
|
||||||
|
(for ((p (all-package-names)))
|
||||||
|
(update-external-package-information! p)
|
||||||
|
(static-render! package-page (symbol->string p)))
|
||||||
|
(static-render! main-page)
|
||||||
|
(package-change-handler index-rerender-needed?
|
||||||
|
pending-completions)]
|
||||||
|
[(list 'package-changed completion-ch package-name)
|
||||||
(update-external-package-information! package-name)
|
(update-external-package-information! package-name)
|
||||||
(static-render! package-page (symbol->string package-name))
|
(static-render! package-page (symbol->string package-name))
|
||||||
(loop #t (if completion-ch
|
(package-change-handler
|
||||||
|
#t
|
||||||
|
(if completion-ch
|
||||||
(cons completion-ch pending-completions)
|
(cons completion-ch pending-completions)
|
||||||
pending-completions))]))))))
|
pending-completions))])))))
|
||||||
|
|
||||||
(package-change-handler-thread (daemon-thread 'package-change-handler package-change-handler))
|
(when (not (package-change-handler-thread))
|
||||||
|
(package-change-handler-thread (daemon-thread 'package-change-handler
|
||||||
|
(lambda () (package-change-handler #f '())))))
|
||||||
|
|
||||||
|
(thread-send (package-change-handler-thread) 'upgrade) ;; switch to new code
|
||||||
|
|
Loading…
Reference in New Issue
Block a user