Confirmed deadlock on clean SBCL 1.1.10.24-9304704 , with and without Jan's patch. If it happens, the stuck thread looks like this:
Backtrace for: #<SB-THREAD:THREAD "T99" RUNNING {10045CE7C3}> 0: ("bogus stack frame") 1: ((FLET #:WITHOUT-INTERRUPTS-BODY-575 :IN SB-THREAD:CONDITION-WAIT)) 2: (SB-THREAD:CONDITION-WAIT #<SB-THREAD:WAITQUEUE {10043774D3}> #<SB-THREAD:MUTEX (free) {10043774A3}> :TIMEOUT NIL) 3: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK :IN SB-THREAD:WAIT-ON-SEMAPHORE)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-520 :IN SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS)) 5: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS #<CLOSURE (FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK :IN SB-THREAD:WAIT-ON-SEMAPHORE) {7FFFDC4FE0CB}> #<SB-THREAD:MUTEX (free) {10043774A3}>) 6: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME NIL :%COUNT 1 :WAITCOUNT 40 :MUTEX #<SB-THREAD:MUTEX (free) {10043774A3}> :QUEUE #<SB-THREAD:WAITQUEUE {10043774D3}>) :TIMEOUT NIL :NOTIFICATION #S(SB-THREAD:SEMAPHORE-NOTIFICATION :%STATUS NIL)) 7: ((FLET #:WITHOUT-INTERRUPTS-BODY-2 :IN #:G804)) 8: ((FLET THREAD-TEST::CRITICAL :IN #:G804)) 9: ((FLET THREAD-TEST::CRITICAL :IN #:G804)) [external] 10: ((FLET #:WITHOUT-INTERRUPTS-BODY-1120 :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE)) 11: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE)) 12: ((FLET #:WITHOUT-INTERRUPTS-BODY-537 :IN SB-THREAD::CALL-WITH-MUTEX)) 13: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE) {7FFFDC4FEC7B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD "T99" RUNNING {10045CE7C3}>> NIL T NIL) 14: (SB-THREAD::INITIAL-THREAD-FUNCTION-TRAMPOLINE #<SB-THREAD:THREAD "T99" RUNNING {10045CE7C3}> #S(SB-THREAD:SEMAPHORE :NAME "Thread setup semaphore" :%COUNT 0 :WAITCOUNT 0 :MUTEX #<SB-THREAD:MUTEX (free) {10045CE833}> :QUEUE #<SB-THREAD:WAITQUEUE {10045CE863}>) #<CLOSURE (FLET THREAD-TEST::CRITICAL :IN #:G804) {100437756B}> NIL NIL NIL NIL) 15: ("foreign function: call_into_lisp") 16: ("foreign function: new_thread_trampoline")
Confirmed deadlock on clean SBCL 1.1.10.24-9304704 , with and without Jan's patch.
If it happens, the stuck thread looks like this:
Backtrace for: #<SB-THREAD:THREAD "T99" RUNNING {10045CE7C3}> INTERRUPTS- BODY-575 :IN SB-THREAD: CONDITION- WAIT)) CONDITION- WAIT #<SB-THREAD: WAITQUEUE {10043774D3}> #<SB-THREAD:MUTEX (free) {10043774A3}> :TIMEOUT NIL) :WITH-SYSTEM- MUTEX-THUNK :IN SB-THREAD: WAIT-ON- SEMAPHORE) ) INTERRUPTS- BODY-520 :IN SB-THREAD: :CALL-WITH- SYSTEM- MUTEX/ALLOW- WITH-INTERRUPTS )) :CALL-WITH- SYSTEM- MUTEX/ALLOW- WITH-INTERRUPTS #<CLOSURE (FLET SB-THREAD: :WITH-SYSTEM- MUTEX-THUNK :IN SB-THREAD: WAIT-ON- SEMAPHORE) {7FFFDC4FE0CB}> #<SB-THREAD:MUTEX (free) {10043774A3}>) WAIT-ON- SEMAPHORE #S(SB-THREAD: SEMAPHORE :NAME NIL :%COUNT 1 :WAITCOUNT 40 :MUTEX #<SB-THREAD:MUTEX (free) {10043774A3}> :QUEUE #<SB-THREAD: WAITQUEUE {10043774D3}>) :TIMEOUT NIL :NOTIFICATION #S(SB-THREAD: SEMAPHORE- NOTIFICATION :%STATUS NIL)) INTERRUPTS- BODY-2 :IN #:G804)) TEST::CRITICAL :IN #:G804)) TEST::CRITICAL :IN #:G804)) [external] INTERRUPTS- BODY-1120 :IN SB-THREAD: :INITIAL- THREAD- FUNCTION- TRAMPOLINE) ) :WITH-MUTEX- THUNK :IN SB-THREAD: :INITIAL- THREAD- FUNCTION- TRAMPOLINE) ) INTERRUPTS- BODY-537 :IN SB-THREAD: :CALL-WITH- MUTEX)) :CALL-WITH- MUTEX #<CLOSURE (FLET SB-THREAD: :WITH-MUTEX- THUNK :IN SB-THREAD: :INITIAL- THREAD- FUNCTION- TRAMPOLINE) {7FFFDC4FEC7B}> #<SB-THREAD:MUTEX "thread result lock" owner: #<SB-THREAD:THREAD "T99" RUNNING {10045CE7C3}>> NIL T NIL) :INITIAL- THREAD- FUNCTION- TRAMPOLINE #<SB-THREAD:THREAD "T99" RUNNING {10045CE7C3}> #S(SB-THREAD: SEMAPHORE :NAME "Thread setup semaphore" :%COUNT 0 :WAITCOUNT 0 :MUTEX #<SB-THREAD:MUTEX (free) {10045CE833}> :QUEUE #<SB-THREAD: WAITQUEUE {10045CE863}>) #<CLOSURE (FLET THREAD- TEST::CRITICAL :IN #:G804) {100437756B}> NIL NIL NIL NIL) trampoline" )
0: ("bogus stack frame")
1: ((FLET #:WITHOUT-
2: (SB-THREAD:
3: ((FLET SB-THREAD:
4: ((FLET #:WITHOUT-
5: (SB-THREAD:
6: (SB-THREAD:
7: ((FLET #:WITHOUT-
8: ((FLET THREAD-
9: ((FLET THREAD-
10: ((FLET #:WITHOUT-
11: ((FLET SB-THREAD:
12: ((FLET #:WITHOUT-
13: (SB-THREAD:
14: (SB-THREAD:
15: ("foreign function: call_into_lisp")
16: ("foreign function: new_thread_