synchronization (2)
This commit is contained in:
33
main.rkt
33
main.rkt
@@ -13,6 +13,7 @@
|
|||||||
sl-log-to-file&display
|
sl-log-to-file&display
|
||||||
sl-set-log-level
|
sl-set-log-level
|
||||||
sl-log-level
|
sl-log-level
|
||||||
|
sl-sync
|
||||||
)
|
)
|
||||||
|
|
||||||
(define (iso-timestamp)
|
(define (iso-timestamp)
|
||||||
@@ -26,8 +27,15 @@
|
|||||||
(date-second d))))
|
(date-second d))))
|
||||||
|
|
||||||
(define sync-count 0)
|
(define sync-count 0)
|
||||||
(define sync-sem (make-semaphore))
|
(define sync-sems (make-hash))
|
||||||
|
|
||||||
|
(define (sl-sync l topic)
|
||||||
|
(let ((sem (hash-ref sync-sems topic #f)))
|
||||||
|
(when (eq? sem #f)
|
||||||
|
(set! sem (make-semaphore))
|
||||||
|
(hash-set! sync-sems topic sem))
|
||||||
|
(log-message l 'fatal #f "@@SYNC@@" (list (iso-timestamp) topic))
|
||||||
|
(semaphore-wait sem)))
|
||||||
|
|
||||||
(define log-callbacks #f)
|
(define log-callbacks #f)
|
||||||
(set! log-callbacks '())
|
(set! log-callbacks '())
|
||||||
@@ -76,11 +84,17 @@
|
|||||||
)
|
)
|
||||||
|
|
||||||
(when (string=? msg "@@SYNC@@")
|
(when (string=? msg "@@SYNC@@")
|
||||||
(set! sync-count (- sync-count 1))
|
(let ((sem (hash-ref sync-sems topic #f)))
|
||||||
(semaphore-post sync-sem)
|
(if (eq? sem #f)
|
||||||
(set! msg "synchronization received")
|
(begin
|
||||||
(set! level 'info)
|
(set! msg (format "Cannot synchronize on topic ~a" topic))
|
||||||
)
|
(set! level 'error))
|
||||||
|
(begin
|
||||||
|
(semaphore-post sem)
|
||||||
|
(set! msg (format "Synchronization received on topic ~a" topic))
|
||||||
|
(set! level 'info)
|
||||||
|
)
|
||||||
|
)))
|
||||||
|
|
||||||
(enqueue! log-queue (list topic level dt msg))
|
(enqueue! log-queue (list topic level dt msg))
|
||||||
(unless (null? lc)
|
(unless (null? lc)
|
||||||
@@ -160,12 +174,7 @@
|
|||||||
(define (warnn msg . args) (log 'warning msg args))
|
(define (warnn msg . args) (log 'warning msg args))
|
||||||
(define (errn msg . args) (log 'error msg args))
|
(define (errn msg . args) (log 'error msg args))
|
||||||
(define (fataln msg . args) (log 'fatal msg args))
|
(define (fataln msg . args) (log 'fatal msg args))
|
||||||
(define (syncn) (begin
|
(define (syncn) (sl-sync l 'id))
|
||||||
(log-message l 'fatal #f "@@SYNC@@" (list (iso-timestamp) 'id))
|
|
||||||
(set! sync-count (+ sync-count 1))
|
|
||||||
(semaphore-wait sync-sem)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
(log-to* receiver (λ () log-callbacks))
|
(log-to* receiver (λ () log-callbacks))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user