I changed the timeout to 10 and changed backtrace to sb-debug:backtrace. paradicsom <11> cat semaphore-test.lisp (defparameter *count* 0) (let ((semaphore (sb-thread:make-semaphore :name "test sem"))) (labels ((make-readers (n i) (values (loop for r from 0 below n collect (sb-thread:make-thread (lambda () (let ((sem semaphore) (*count* 0)) (dotimes (s i) (incf *count*) (sb-thread:wait-on-semaphore sem)))) :name (format nil "reader ~S" r))) (* n i))) (make-writers (n readers i) (let ((j (* readers i))) (multiple-value-bind (k rem) (truncate j n) (values (let ((writers (loop for w from 0 below n collect (sb-thread:make-thread (lambda () (let ((sem semaphore) (*count* 0)) (dotimes (s k) (incf *count*) (sb-thread:signal-semaphore sem)))) :name (format nil "writer ~S" w))))) (assert (zerop rem)) writers) (+ rem (* n k)))))) (test (r w n) (format *debug-io* "TEST ~S ~S ~S ~S~%" r w n (get-internal-real-time)) (force-output t) (multiple-value-bind (readers x) (make-readers r n) (assert (= (length readers) r)) (multiple-value-bind (writers y) (make-writers w r n) (assert (= (length writers) w)) (assert (= x y)) (handler-case (sb-ext:with-timeout 10.0 (mapc #'sb-thread:join-thread writers) (mapc #'sb-thread:join-thread readers)) (sb-ext:timeout () (mapc (lambda (thread) (format *debug-io* "BACKTRACE FOR ~A~%" thread) (handler-case (sb-thread:interrupt-thread thread (lambda () (format *debug-io* "Count=~S~%" *count*) (sb-debug:backtrace))) (sb-thread:interrupt-thread-error (c) (declare (ignore c)) (format *debug-io* "Thread exited in the meantime ...~%"))) (sleep 0.1)) (append readers writers))))) (assert (zerop (sb-thread:semaphore-count semaphore))) (values)))) (test 1 1 100) (test 2 2 10000) (test 4 2 10000) (test 4 2 10000) (test 10 10 10000) (test 10 1 10000))) paradicsom <12> sbcl This is SBCL 1.0.25.55, an implementation of ANSI Common Lisp. More information about SBCL is available at . SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (compile-file "semaphore-test.lisp") ; compiling file "/home/brown/semaphore-test.lisp" (written 20 FEB 2009 10:46:03 AM): ; compiling (DEFPARAMETER *COUNT* ...) ; compiling (LET (#) ...) ; file: /home/brown/semaphore-test.lisp ; in: LET ((SEMAPHORE (SB-THREAD:MAKE-SEMAPHORE :NAME "test sem"))) ; #'SB-THREAD:JOIN-THREAD ; ; note: deleting unreachable code ; (MAPC #'SB-THREAD:JOIN-THREAD BOB::WRITERS) ; --> LET LET ; ==> ; BOB::WRITERS ; ; note: deleting unreachable code ; #'SB-THREAD:JOIN-THREAD ; ; note: deleting unreachable code ; (MAPC #'SB-THREAD:JOIN-THREAD BOB::READERS) ; --> LET LET ; ==> ; BOB::READERS ; ; note: deleting unreachable code ; ; compilation unit finished ; printed 4 notes ; /home/brown/semaphore-test.fasl written ; compilation finished in 0:00:00.148 #P"/home/brown/semaphore-test.fasl" NIL NIL * (load "semaphore-test.fasl") TEST 1 1 100 12935 TEST 2 2 10000 12937 TEST 4 2 10000 12979 TEST 4 2 10000 13448 TEST 10 10 10000 13741 TEST 10 1 10000 14859 BACKTRACE FOR # Count=2890 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAD3601D0) #.(SB-SYS:INT-SAP #X2AAAAD3600A0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAD3601D0) #.(SB-SYS:INT-SAP #X2AAAAD3600A0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 16: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0))[:EXTERNAL] 17: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 18: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 19: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 2)) 20: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 1127 :WAITCOUNT 8 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 21: ((LAMBDA ())) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 23: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 24: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 25: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 26: ((LAMBDA ())) 27: ("foreign function: #x41F993") 28: ("foreign function: #x4170F3") BACKTRACE FOR # Count=2866 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAD7AB1D0) #.(SB-SYS:INT-SAP #X2AAAAD7AB0A0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAD7AB1D0) #.(SB-SYS:INT-SAP #X2AAAAD7AB0A0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 16: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0))[:EXTERNAL] 17: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 18: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 19: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0)) 20: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 0 :WAITCOUNT 10 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 21: ((LAMBDA ())) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 23: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 24: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 25: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 26: ((LAMBDA ())) 27: ("foreign function: #x41F993") 28: ("foreign function: #x4170F3") BACKTRACE FOR # Count=3415 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAADBF61D0) #.(SB-SYS:INT-SAP #X2AAAADBF60A0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAADBF61D0) #.(SB-SYS:INT-SAP #X2AAAADBF60A0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 16: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 0))[:EXTERNAL] 17: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 18: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 19: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0)) 20: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 0 :WAITCOUNT 10 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 21: ((LAMBDA ())) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 23: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 24: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 25: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 26: ((LAMBDA ())) 27: ("foreign function: #x41F993") 28: ("foreign function: #x4170F3") BACKTRACE FOR # Count=4101 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAE0411D0) #.(SB-SYS:INT-SAP #X2AAAAE0410A0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAE0411D0) #.(SB-SYS:INT-SAP #X2AAAAE0410A0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 16: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 2))[:EXTERNAL] 17: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 18: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 19: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 2)) 20: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 0 :WAITCOUNT 9 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 2) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 21: ((LAMBDA ())) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 23: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 24: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 25: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 26: ((LAMBDA ())) 27: ("foreign function: #x41F993") 28: ("foreign function: #x4170F3") BACKTRACE FOR # Count=5834 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAE8D61D0) #.(SB-SYS:INT-SAP #X2AAAAE8D60A0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAE8D61D0) #.(SB-SYS:INT-SAP #X2AAAAE8D60A0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 16: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0))[:EXTERNAL] 17: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 18: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 19: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 2)) 20: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 8794 :WAITCOUNT 1 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 21: ((LAMBDA ())) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 23: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 24: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 25: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 26: ((LAMBDA ())) 27: ("foreign function: #x41F993") 28: ("foreign function: #x4170F3") BACKTRACE FOR # BACKTRACE FOR # Count=6865 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAEF6D010) #.(SB-SYS:INT-SAP #X2AAAAED210D0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAEF6D010) #.(SB-SYS:INT-SAP #X2AAAAED210D0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x411B78") 14: ("foreign function: #x411F76") 15: ("foreign function: #x40FD4B") 16: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 17: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 1))[:EXTERNAL] 18: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 19: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 20: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 0)) 21: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 826 :WAITCOUNT 6 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 22: ((LAMBDA ())) 23: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 24: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 25: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 26: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 27: ((LAMBDA ())) 28: ("foreign function: #x41F993") 29: ("foreign function: #x4170F3") BACKTRACE FOR # Count=9343 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAF3B8010) #.(SB-SYS:INT-SAP #X2AAAAF16C0D0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAF3B8010) #.(SB-SYS:INT-SAP #X2AAAAF16C0D0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x411B78") 14: ("foreign function: #x411F76") 15: ("foreign function: #x40FD4B") 16: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 17: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 1))[:EXTERNAL] 18: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 19: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 20: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0)) 21: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 32 :WAITCOUNT 9 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 22: ((LAMBDA ())) 23: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 24: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 25: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 26: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 27: ((LAMBDA ())) 28: ("foreign function: #x41F993") 29: ("foreign function: #x4170F3") BACKTRACE FOR # Count=8234 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAF803010) #.(SB-SYS:INT-SAP #X2AAAAF5B70D0)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAF803010) #.(SB-SYS:INT-SAP #X2AAAAF5B70D0))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x411B78") 14: ("foreign function: #x411F76") 15: ("foreign function: #x40FD4B") 16: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CONDITION-WAIT]356)) 17: (SB-THREAD:CONDITION-WAIT #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #) #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0))[:EXTERNAL] 18: ((FLET SB-THREAD::WITH-SYSTEM-MUTEX-THUNK)) 19: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 20: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0)) 21: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 0 :WAITCOUNT 10 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 1) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 22: ((LAMBDA ())) 23: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 24: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 25: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 26: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 27: ((LAMBDA ())) 28: ("foreign function: #x41F993") 29: ("foreign function: #x4170F3") BACKTRACE FOR # Count=6374 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAFA02390) #.(SB-SYS:INT-SAP #X2AAAAFA02260)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAFA02390) #.(SB-SYS:INT-SAP #X2AAAAFA02260))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: (SB-THREAD:GET-MUTEX # # #) 16: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 17: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0)) 18: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 0 :WAITCOUNT 8 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 19: ((LAMBDA ())) 20: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 21: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 23: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 24: ((LAMBDA ())) 25: ("foreign function: #x41F993") 26: ("foreign function: #x4170F3") BACKTRACE FOR # Count=7355 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAFE4D390) #.(SB-SYS:INT-SAP #X2AAAAFE4D260)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAAFE4D390) #.(SB-SYS:INT-SAP #X2AAAAFE4D260))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x41254F") 14: ("bogus stack frame") 15: (SB-THREAD:GET-MUTEX # # #) 16: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS]303)) 17: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX/ALLOW-WITH-INTERRUPTS # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 1)) 18: (SB-THREAD:WAIT-ON-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 1 :WAITCOUNT 9 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER # :STATE 1) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #))) 19: ((LAMBDA ())) 20: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 21: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 23: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 1) # T) 24: ((LAMBDA ())) 25: ("foreign function: #x41F993") 26: ("foreign function: #x4170F3") BACKTRACE FOR # Count=81266 0: (SB-DEBUG::MAP-BACKTRACE #)[:EXTERNAL] 1: (SB-DEBUG:BACKTRACE 1152921504606846975 #) 2: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITH-SYSTEM-MUTEX-THUNK]1011)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17]27)) 4: ((FLET #:WITHOUT-INTERRUPTS-BODY-[INVOKE-INTERRUPTION]17)) 5: (SB-SYS:INVOKE-INTERRUPTION #) 6: (SB-SYS:INVOKE-INTERRUPTION #)[:EXTERNAL] 7: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAB04E4010) #.(SB-SYS:INT-SAP #X2AAAB0298310)) 8: ((FLET SB-UNIX::RUN-HANDLER) 13 #.(SB-SYS:INT-SAP #X2AAAB04E4010) #.(SB-SYS:INT-SAP #X2AAAB0298310))[:OPTIONAL] 9: ((FLET SB-UNIX::RUN-HANDLER))[:EXTERNAL] 10: ("foreign function: #x41F993") 11: ("foreign function: #x40BABE") 12: ("foreign function: #x412385") 13: ("foreign function: #x411B78") 14: ("foreign function: #x411F76") 15: ("foreign function: #x40FD4B") 16: ((FLET #:CLEANUP-FUN-[CALL-WITH-SYSTEM-MUTEX]257))[:CLEANUP] 17: (SB-THREAD::CALL-WITH-SYSTEM-MUTEX # #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0)) 18: (SB-THREAD:SIGNAL-SEMAPHORE #S(SB-THREAD:SEMAPHORE :NAME "test sem" :%COUNT 0 :WAITCOUNT 8 :MUTEX #S(SB-THREAD:MUTEX :NAME NIL :%OWNER NIL :STATE 0) :QUEUE #S(SB-THREAD:WAITQUEUE :NAME NIL :DATA #)) 1) 19: ((LAMBDA ())) 20: ((FLET #:WITHOUT-INTERRUPTS-BODY-[G844]850)) 21: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 22: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]446)) 23: (SB-THREAD::CALL-WITH-MUTEX # #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER # :STATE 2) # T) 24: ((LAMBDA ())) 25: ("foreign function: #x41F993") 26: ("foreign function: #x4170F3") T * (load "semaphore-test.fasl") TEST 1 1 100 47146 TEST 2 2 10000 47148 TEST 4 2 10000 47172 TEST 4 2 10000 47377 TEST 10 10 10000 47480 TEST 10 1 10000 48008 T * (load "semaphore-test.fasl") TEST 1 1 100 229995 TEST 2 2 10000 229997 TEST 4 2 10000 230106 TEST 4 2 10000 230260 TEST 10 10 10000 230578 TEST 10 1 10000 230892 T *