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
*