Abstract out daemonization
This commit is contained in:
parent
4288c80319
commit
a4f4daa445
21
src/daemon.rkt
Normal file
21
src/daemon.rkt
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
#lang racket/base
|
||||||
|
|
||||||
|
(provide daemonize-thunk
|
||||||
|
daemon-thread)
|
||||||
|
|
||||||
|
(require (only-in web-server/private/util exn->string))
|
||||||
|
|
||||||
|
(define (daemonize-thunk name boot-thunk)
|
||||||
|
(lambda ()
|
||||||
|
(let reboot ()
|
||||||
|
(with-handlers* ((exn:fail? (lambda (e)
|
||||||
|
(log-error "*** DAEMON CRASHED: ~a ***\n~a"
|
||||||
|
name
|
||||||
|
(exn->string e))
|
||||||
|
(sleep 5)
|
||||||
|
(reboot))))
|
||||||
|
(define result (boot-thunk))
|
||||||
|
(log-warning "Daemon thread ~a exited normally (returning ~v)" name result)))))
|
||||||
|
|
||||||
|
(define (daemon-thread name boot-thunk)
|
||||||
|
(thread (daemonize-thunk name boot-thunk)))
|
|
@ -21,9 +21,9 @@
|
||||||
(require racket/string)
|
(require racket/string)
|
||||||
(require racket/list)
|
(require racket/list)
|
||||||
(require web-server/private/gzip)
|
(require web-server/private/gzip)
|
||||||
(require (only-in web-server/private/util exn->string))
|
|
||||||
(require net/url)
|
(require net/url)
|
||||||
(require "reload.rkt")
|
(require "reload.rkt")
|
||||||
|
(require "daemon.rkt")
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
@ -71,16 +71,11 @@
|
||||||
[next-fetch-deadline (+ (current-inexact-milliseconds) package-fetch-interval)]))
|
[next-fetch-deadline (+ (current-inexact-milliseconds) package-fetch-interval)]))
|
||||||
|
|
||||||
(define (package-manager)
|
(define (package-manager)
|
||||||
(with-handlers* ((exn:fail? (lambda (e)
|
|
||||||
(log-error "*** PACKAGE MANAGER CRASHED ***\n~a"
|
|
||||||
(exn->string e))
|
|
||||||
(sleep 5)
|
|
||||||
(package-manager))))
|
|
||||||
(package-manager-main (package-manager-state (hash)
|
(package-manager-main (package-manager-state (hash)
|
||||||
(set)
|
(set)
|
||||||
(set)
|
(set)
|
||||||
0
|
0
|
||||||
base-bogus-timeout))))
|
base-bogus-timeout)))
|
||||||
|
|
||||||
(define (refresh-packages raw-remote-packages state)
|
(define (refresh-packages raw-remote-packages state)
|
||||||
(define local-packages (package-manager-state-local-packages state))
|
(define local-packages (package-manager-state-local-packages state))
|
||||||
|
@ -195,7 +190,7 @@
|
||||||
|
|
||||||
(define package-manager-thread
|
(define package-manager-thread
|
||||||
(make-persistent-state 'package-manager-thread
|
(make-persistent-state 'package-manager-thread
|
||||||
(lambda () (thread package-manager))))
|
(lambda () (daemon-thread 'package-manager package-manager))))
|
||||||
|
|
||||||
(define (manager-rpc . request)
|
(define (manager-rpc . request)
|
||||||
(define ch (make-channel))
|
(define ch (make-channel))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user