(define (event-dispatch event-vars) (mutex-lock! server-mutex) (pp event-vars) (unless (null? event-filters) (let event-filter-loop ((event-filter (car event-filters)) (remaining-event-filters (cdr event-filters))) (let filter-var-loop ((filter-var (car event-filter)) (remaining-filter-vars (cdr event-filter))) (if (equal? (cdr filter-var) (alist-ref (car filter-var) event-vars)) (if (null? remaining-filter-vars) (begin (set! event-filters (delete event-filter event-filters)) (mailbox-send! events event-vars)) (filter-var-loop (car remaining-filter-vars) (cdr remaining-filter-vars))) (unless (null? remaining-event-filters) (event-filter-loop (car remaining-event-filters) (cdr remaining-event-filters))))))) (mutex-unlock! server-mutex))