;; Leave this running for a minute or two, keep an eye on it ;; Eventually something will cause a stack overflow if run ;; in the interpreter. (use srfi-18 posix) (set-signal-handler! signal/usr1 (lambda (n) (print "who's there?"))) (let ((pid (process-fork))) (unless (zero? pid) (let lp () (print "knock, knock") (process-signal pid signal/usr1) (sleep 1) (lp)))) (define outer-mutex (make-mutex 'outer-mutex)) (define inner-mutex (make-mutex 'inner-mutex)) (define spinner (thread-start! (lambda () (mutex-lock! inner-mutex) (mutex-unlock! outer-mutex) ; signal ready (let lp () (print "spinning") (thread-sleep! 0.1) (lp))))) (mutex-lock! outer-mutex 0 spinner) (mutex-lock! outer-mutex) ; now wait till spinner is ready (define reader (thread-start! (lambda () (let lp () (lp))))) (mutex-lock! inner-mutex) (print "ERROR! Should never be unlocked") (exit 1)