#lang racket (require racket-upnp) (provide check-dlna-players) (define running-sem (make-semaphore 1)) (define running #f) (define (check-dlna-players gui) (let ((can-check (begin (semaphore-wait running-sem) (let ((rng running)) (if rng (begin (semaphore-post running-sem) #f) (begin (set! running #t) (semaphore-post running-sem) #t)))))) (if can-check (void (thread (λ () (let ((r (query-media-renderers))) (let ((r* (map (λ (r) (list (media-renderer-name r) r)) r))) (send gui set-dlna-renderers! r*) (semaphore-wait running-sem) (set! running #f) (semaphore-post running-sem) ))))) (void (send gui dlna-query-busy)) ) ) )