Simple mailbox implementation added by crzcrz on Tue Sep 29 12:44:31 2026
(import queues) (import srfi-18) (define (make-mailbox #!optional name) (let ((queue (make-queue)) (mutex (make-mutex name)) (cv (make-condition-variable name))) (define (send msg) (mutex-lock! mutex) (queue-add! queue msg) (condition-variable-signal! cv) (mutex-unlock! mutex) (void)) (define (recv timeout) (mutex-lock! mutex) (if (queue-empty? queue) (if (mutex-unlock! mutex cv timeout) (recv timeout) #f) (let ((msg (queue-remove! queue))) (mutex-unlock! mutex) msg))) (lambda (op . args) (case op [(send) (apply send args)] [(recv) (apply recv args)] [else (error 'mailbox "unknown op" op)]))))