For me, line 4 of these random-states is a pretty reliable trigger: tests$ sbcl --script wait-on-semaphore.script.lisp 4 ::: Running (:SEMAPHORE-NOTIFICATION :WAIT-ON-SEMAPHORE) .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- [ 0.1s] 33 safe remaining: T35, T37, T39, T41, T43, T45, T47, T49, T51, T53, T55, T57, T59, T61, T63, T65, T67, T69, T71, T73, T75, T77, T79, T81, T83, T85, T87, T89, T91, T93, T95, T97, T99 Backtrace for: #<SB-THREAD:THREAD "T35" RUNNING {10034138E3}> 0: ("bogus stack frame") 1: ((FLET #:WITHOUT-INTERRUPTS-BODY-575 :IN SB-THREAD:CONDITION-WAIT)) 2: (SB-THREAD:CONDITION-WAIT #<SB-THREAD:WAITQUEUE {1003373623}> #<SB-THREAD:MUTEX (free) {10033735F3}> :TIMEOUT NIL) [...]
For me, line 4 of these random-states is a pretty reliable trigger: semaphore. script. lisp 4 NOTIFICATION :WAIT-ON-SEMAPHORE) -.-.-.- .-.-.-. -.-.-.- .-.-.-. -.-.-.- .-.-.-. -.-.-.- .-.-.-. -.-.-.- .-.-.-. -.-.-.- .-.-.-. -.-.-.- .- INTERRUPTS- BODY-575 :IN SB-THREAD: CONDITION- WAIT)) CONDITION- WAIT #<SB-THREAD: WAITQUEUE {1003373623}> #<SB-THREAD:MUTEX (free) {10033735F3}> :TIMEOUT NIL)
tests$ sbcl --script wait-on-
::: Running (:SEMAPHORE-
.-.-.-.
[ 0.1s] 33 safe remaining: T35, T37, T39, T41, T43, T45, T47, T49, T51, T53, T55, T57, T59, T61, T63, T65, T67, T69, T71, T73, T75, T77, T79, T81, T83, T85, T87, T89, T91, T93, T95, T97, T99
Backtrace for: #<SB-THREAD:THREAD "T35" RUNNING {10034138E3}>
0: ("bogus stack frame")
1: ((FLET #:WITHOUT-
2: (SB-THREAD:
[...]