adjust sync pattern to avoid cross-thread set!
This commit is contained in:
parent
0f26aafd1f
commit
0d0503bda7
|
@ -1439,7 +1439,6 @@ TODO
|
||||||
(define logger-editor #f)
|
(define logger-editor #f)
|
||||||
(define logger-messages '())
|
(define logger-messages '())
|
||||||
(define user-log-receiver-args-str (preferences:get 'drracket:logger-receiver-string))
|
(define user-log-receiver-args-str (preferences:get 'drracket:logger-receiver-string))
|
||||||
(define user-log-receiver #f)
|
|
||||||
(define/public (set-user-log-receiver-args str args)
|
(define/public (set-user-log-receiver-args str args)
|
||||||
(set! user-log-receiver-args-str str)
|
(set! user-log-receiver-args-str str)
|
||||||
(update-log-receiver-to-match-str))
|
(update-log-receiver-to-match-str))
|
||||||
|
@ -1449,19 +1448,13 @@ TODO
|
||||||
[logging-on?
|
[logging-on?
|
||||||
(update-log-receiver-to-match-str)]
|
(update-log-receiver-to-match-str)]
|
||||||
[else
|
[else
|
||||||
(when user-log-receiver
|
(channel-put user-log-receiver-changed #f)]))
|
||||||
(set! user-log-receiver #f)
|
|
||||||
(semaphore-post user-log-receiver-changed))]))
|
|
||||||
(define/private (update-log-receiver-to-match-str)
|
(define/private (update-log-receiver-to-match-str)
|
||||||
(define args (parse-logger-args user-log-receiver-args-str))
|
(define args (parse-logger-args user-log-receiver-args-str))
|
||||||
(set! user-log-receiver
|
(channel-put user-log-receiver-changed
|
||||||
(and args
|
(and args
|
||||||
(apply make-log-receiver user-logger args)))
|
(apply make-log-receiver user-logger args))))
|
||||||
(semaphore-post user-log-receiver-changed))
|
(define user-log-receiver-changed (make-channel))
|
||||||
|
|
||||||
(define/private (inform-user-logger-thread-that-logger-changed)
|
|
||||||
(semaphore-post user-log-receiver-changed))
|
|
||||||
(define user-log-receiver-changed (make-semaphore 0))
|
|
||||||
(thread
|
(thread
|
||||||
(λ ()
|
(λ ()
|
||||||
(struct gui-event (start end name) #:prefab)
|
(struct gui-event (start end name) #:prefab)
|
||||||
|
@ -1476,10 +1469,11 @@ TODO
|
||||||
(semaphore-post sema)
|
(semaphore-post sema)
|
||||||
(for ([vec (in-list (reverse my-evts))])
|
(for ([vec (in-list (reverse my-evts))])
|
||||||
(new-log-message vec)))
|
(new-log-message vec)))
|
||||||
(let loop ()
|
(let loop ([user-log-receiver #f])
|
||||||
(sync
|
(sync
|
||||||
(handle-evt user-log-receiver-changed
|
(handle-evt user-log-receiver-changed
|
||||||
(λ (_) (loop)))
|
(λ (user-log-receiver)
|
||||||
|
(loop user-log-receiver)))
|
||||||
(if user-log-receiver
|
(if user-log-receiver
|
||||||
(handle-evt user-log-receiver
|
(handle-evt user-log-receiver
|
||||||
(λ (vec)
|
(λ (vec)
|
||||||
|
@ -1490,7 +1484,7 @@ TODO
|
||||||
(queue-callback user-event-handler-callback #f)
|
(queue-callback user-event-handler-callback #f)
|
||||||
(set! callback-running? #t))
|
(set! callback-running? #t))
|
||||||
(semaphore-post sema))
|
(semaphore-post sema))
|
||||||
(loop)))
|
(loop user-log-receiver)))
|
||||||
never-evt)))))
|
never-evt)))))
|
||||||
(define/public (get-logger-messages) logger-messages)
|
(define/public (get-logger-messages) logger-messages)
|
||||||
(define/private (new-log-message vec)
|
(define/private (new-log-message vec)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user