From: Attila L. <att...@gm...> - 2007-10-24 18:32:09
|
dear list! recently i've compiled an sbcl with :sb-hash-table-debug and got several error reports coming from various places in sbcl. first i'd suggest turning the error signaled from with-concurrent-access-check into a cerror as i did locally. another useful change would be to ignore concurrent reads because Juho said they are safe in the current implementation (but a read + a write is not!). the list i've seen so far: - SB-PCL::GET-SECONDARY-DISPATCH-FUNCTION1 this one is probably the most serious one, because AFAIU this ht has high traffic - FIND-PACKAGE this may also lead to trouble, but the rate of package definitions is low enough to keep it at the end of the TODO... - SB-IMPL::EXTERNAL-FORMATS-FUNS this one is safe, the ht is not modified at runtime (so the error is a false alarm from concurrent reads) - SB-ALIEN::ALIEN-TYPE-CLASS-OR-LOSE this one is also a constant ht. it's also quite small (16) so it would probably be faster as a linear search. it needs to be measured, though. - SB-PCL::DEFAULT-CONSTANTP calling SB-C::CONSTANT-SPECIAL-FORM-P this is another small read-only ht hope this helps, -- attila |
From: Attila L. <att...@gm...> - 2007-10-26 12:50:40
|
the current list, new ones on the top: - SB-DI::MAKE-COMPILED-DEBUG-FUN accessing *compiled-debug-funs* - SB-PCL::GET-SECONDARY-DISPATCH-FUNCTION1 this one is probably the most serious one, because AFAIU this ht has high traffic - FIND-PACKAGE this may also lead to trouble, but the rate of package definitions is low enough to keep it at the end of the TODO... - SB-IMPL::EXTERNAL-FORMATS-FUNS this one is safe, the ht is not modified at runtime (so the error is a false alarm from concurrent reads) - SB-ALIEN::ALIEN-TYPE-CLASS-OR-LOSE this one is also a constant ht. it's also quite small (16) so it would probably be faster as a linear search. it needs to be measured, though. - SB-PCL::DEFAULT-CONSTANTP calling SB-C::CONSTANT-SPECIAL-FORM-P this is another small read-only ht -- attila |
From: Attila L. <att...@gm...> - 2007-11-01 10:39:36
|
the current list, new ones on the top: - SB-KERNEL::INVALIDATE-LAYOUT 11: (CERROR "Ignore the concurrent access 12: ((FLET SB-IMPL::ERROR-FUN)) 13: (REMHASH #<SB-KERNEL:STANDARD-CLASSOI 14: (SB-KERNEL::INVALIDATE-LAYOUT #<SB-PC 15: (SB-KERNEL:REGISTER-LAYOUT #<SB-PCL:: 16: (SB-PCL::UPDATE-LISP-CLASS-LAYOUT #<S 17: (SB-PCL::UPDATE-SLOTS #<STANDARD-LAYE 18: (SB-PCL::UPDATE-CLASS #<STANDARD-LAYE 19: (SB-PCL::UPDATE-CLASS #<STANDARD-LAYE 20: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT- 21: (ENSURE-FINALIZED #<STANDARD-LAYER-CL - SB-KERNEL:REGISTER-LAYOUT called from SB-PCL::MAKE-PRELIMINARY-LAYOUT - SB-DI::MAKE-COMPILED-DEBUG-FUN accessing *compiled-debug-funs* - SB-PCL::GET-SECONDARY-DISPATCH-FUNCTION1 this one is probably the most serious one, because AFAIU this ht has high traffic - FIND-PACKAGE this may also lead to trouble, but the rate of package definitions is low enough to keep it at the end of the TODO... - SB-IMPL::EXTERNAL-FORMATS-FUNS this one is safe, the ht is not modified at runtime (so the error is a false alarm from concurrent reads) - SB-ALIEN::ALIEN-TYPE-CLASS-OR-LOSE this one is also a constant ht. it's also quite small (16) so it would probably be faster as a linear search. it needs to be measured, though. - SB-PCL::DEFAULT-CONSTANTP calling SB-C::CONSTANT-SPECIAL-FORM-P this is another small read-only ht -- attila |
From: Attila L. <att...@gm...> - 2008-03-26 17:39:38
|
i've got another catch: Concurrent access to #<HASH-TABLE :TEST EQ :COUNT 2543 {10003D0091}> [Condition of type SIMPLE-ERROR] Restarts: 1: CONTINUE Ignore the concurrent access 0: TERMINATE-THREAD Terminate this thread (#<THREAD "connection-multiplexer worker 0" {100849C061}>) Backtrace: 0: ((FLET SB-IMPL::ERROR-FUN)) 1: (REMHASH #<SB-KERNEL:STANDARD-CLASSOID NET.SOCKETS.CC:CONNECTION> #<HASH-TABLE :TEST EQ :COUNT 2544 {10003D0091}>) 2: (SB-KERNEL::INVALIDATE-LAYOUT #<SB-PCL::WRAPPER #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> {10089ED791}>) Locals: SB-DEBUG::ARG-0 = #<SB-PCL::WRAPPER #<STANDARD-CLASS CONNECTION> {10089ED791}> 3: (SB-KERNEL:REGISTER-LAYOUT #<SB-PCL::WRAPPER #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> {1008617171}>) [:EXTERNAL] Locals: SB-DEBUG::ARG-0 = 3 SB-DEBUG::ARG-1 = #<SB-PCL::WRAPPER #<STANDARD-CLASS CONNECTION> {1008617171}> 4: (SB-PCL::UPDATE-LISP-CLASS-LAYOUT #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> #<SB-PCL::WRAPPER #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> {1008617171}>) Locals: SB-DEBUG::ARG-0 = #<STANDARD-CLASS CONNECTION> SB-DEBUG::ARG-1 = #<SB-PCL::WRAPPER #<STANDARD-CLASS CONNECTION> {1008617171}> 5: (SB-PCL::UPDATE-SLOTS #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> (#<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION SB-GRAY::OPEN-P> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::INPUT-FD> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::READ-FN> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::OUTPUT-FD> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::WRITE-FN> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::EXTERNAL-FORMAT> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::INPUT-BUFFER> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::OUTPUT-BUFFER> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::DIRTY> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::IBUF-UNREAD-INDEX> ...)) Locals: SB-DEBUG::ARG-0 = #<STANDARD-CLASS CONNECTION> SB-DEBUG::ARG-1 = (#<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION SB-GRAY::OPEN-P> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::INPUT-FD> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::READ-FN> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::OUTPUT-FD> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::WRITE-FN> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::EXTERNAL-FORMAT> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::INPUT-BUFFER> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::OUTPUT-BUFFER> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::DIRTY> #<SB-MOP:STANDARD-EFFECTIVE-SLOT-DEFINITION IO.STREAMS::IBUF-UNREAD-INDEX> ...) 6: (SB-PCL::UPDATE-CLASS #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> T) Locals: SB-DEBUG::ARG-0 = #<STANDARD-CLASS CONNECTION> SB-DEBUG::ARG-1 = T 7: (SB-PCL::UPDATE-CLASS #<STANDARD-CLASS NET.SOCKETS.CC:CONNECTION> T) [:EXTERNAL] Locals: SB-DEBUG::ARG-0 = 2 SB-DEBUG::ARG-1 = #<STANDARD-CLASS CONNECTION> SB-DEBUG::ARG-2 = T 8: (SB-PCL::INSTALL-OPTIMIZED-CONSTRUCTOR #<SB-PCL::CTOR {10088F92C9}>) Locals: SB-DEBUG::ARG-0 = #<SB-PCL::CTOR {10088F92C9}> 9: ((LAMBDA (&REST SB-PCL::ARGS)) 9 NIL NIL #<BABEL:EXTERNAL-FORMAT UTF-8 CRLF {1008EB43D1}> NIL NIL) 10: (NET.SOCKETS.CC:MAKE-CONNECTION 9) [:EXTERNAL] 11: (NET.SOCKETS.CC::ACCEPT-ONE-CONNECTION #<NET.SOCKETS.CC:CONNECTION-ACCEPTOR {100848FF31}>) 12: ((LAMBDA (CL-CONT::K &REST CL-CONT::ARGS)) #<CLOSURE (SB-C::&OPTIONAL-DISPATCH #) {10085A7199}> #<NET.SOCKETS.CC:CONNECTION-ACCEPTOR {100848FF31}>) 13: (NET.SOCKETS.CC::CONTINUE-CONNECTION #<NET.SOCKETS.CC:CONNECTION-ACCEPTOR {100848FF31}> #<NET.SOCKETS.CC::ACCEPTING-CONNECTION {1008498FD1}>) 14: (NET.SOCKETS.CC::PROCESS-SOME-CONNECTION-MULTIPLEXER-EVENTS #<NET.SOCKETS.CC:CONNECTION-ACCEPTOR {100848FF31}>) 15: (NET.SOCKETS.CC::CONNECTION-MULTIPLEXER-WORKER-LOOP #<NET.SOCKETS.CC:CONNECTION-ACCEPTOR {100848FF31}>) 16: ((LAMBDA ())) 17: ((LAMBDA ())) 18: ((FLET SB-THREAD::WITH-MUTEX-THUNK)) 19: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]489)) 20: (SB-THREAD::CALL-WITH-MUTEX #<CLOSURE (FLET SB-THREAD::WITH-MUTEX-THUNK) {2B8CF0C5DEF9}> #S(SB-THREAD:MUTEX :NAME "thread result lock" :%OWNER #<SB-THREAD:THREAD "connection-multiplexer worker 0" {100849C061}> :STATE 1) #<SB-THREAD:THREAD "connection-multiplexer worker 0" {100849C061}> T) 21: ((LAMBDA ())) 22: ("foreign function: #x41D9B2") 23: ("foreign function: #x4157F4") hth, -- attila |
From: Attila L. <att...@gm...> - 2008-04-24 13:12:22
|
another catch. at a quick glance i think make-package is missing a lock. as a somewhat related sidenote: package related errors are signalled from within the with-spinlock block. it's probably not worth the trouble, but if someone's going for a little cleanup, they may consider signalling outside the spinlock protected body and re-acquiring the lock when a restart is selected. hth, -- attila Concurrent access to #<HASH-TABLE :TEST EQUAL :COUNT 287 {10002C6D01}> [Condition of type SIMPLE-ERROR] Restarts: 2: CONTINUE Ignore the concurrent access 1: ABORT Return to SLIME's top level. 0: TERMINATE-THREAD Terminate this thread (#<THREAD "repl-thread" {10068B0001}>) Backtrace: 0: ((FLET SB-IMPL::ERROR-FUN)) 1: (REMHASH "ASDF0" #<HASH-TABLE :TEST EQUAL :COUNT 287 {10002C6D01}>) Locals: SB-DEBUG::ARG-0 = "ASDF0" SB-DEBUG::ARG-1 = #<HASH-TABLE :TEST EQUAL :COUNT 287 {10002C6D01}> 2: ((FLET SB-THREAD::WITH-RECURSIVE-SPINLOCK-THUNK)) 3: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-SPINLOCK]553)) 4: (SB-THREAD::CALL-WITH-RECURSIVE-SPINLOCK #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-SPINLOCK-THUNK) {2ADD71B57089}> #S(SB-THREAD::SPINLOCK :NAME "Package Lock" :VALUE #<SB-THREAD:THREAD "repl-thread" {10068B0001}>)) Locals: SB-DEBUG::ARG-0 = #<CLOSURE (FLET SB-THREAD::WITH-RECURSIVE-SPINLOCK-THUNK) {2ADD71B57089}> SB-DEBUG::ARG-1 = #S(SB-THREAD::SPINLOCK :NAME "Package Lock" :VALUE #<SB-THREAD:THREAD "repl-thread" {10068B0001}>) 5: (DELETE-PACKAGE #<PACKAGE "ASDF0">) Locals: SB-DEBUG::ARG-0 = #<PACKAGE "ASDF0"> 6: ((FLET #:CLEANUP-FUN-[FIND-SYSTEM]312)) [:CLEANUP] 7: (ASDF:FIND-SYSTEM "cl-perec" NIL) Locals: ASDF::ERROR-P = NIL ASDF::NAME = "cl-perec" 8: ((ASDF:FIND-COMPONENT ((EQL NIL) T)) "cl-perec" NIL) 9: ((LABELS ASDF::DO-ONE-DEP) ASDF:COMPILE-OP :CL-PEREC NIL) 10: ((LABELS ASDF::DO-DEP) ASDF:COMPILE-OP (:DWIM-UTIL :CL-TYPESETTING :CL-PPCRE :CL-PDF :CL-CONTAINERS :CL-STORE :CL-GRAPH :CL-L10N :CL-PEREC :BORDEAUX-THREADS ...)) 11: ((ASDF::TRAVERSE (ASDF:OPERATION ASDF:COMPONENT)) #<ASDF:COMPILE-OP NIL {10076BBF21}> #<DWIM-SYSTEM::DWIM-SYSTEM "dwim-meta-model" {1006803DB1}>) |
From: Attila L. <att...@gm...> - 2008-12-09 20:51:13
|
fyi, i just saw another one of this. this is with sbcl 1.0.23.26 (without Nikodemus' PLC patch). - attila On Thu, Nov 1, 2007 at 11:39 AM, Attila Lendvai <att...@gm...> wrote: > the current list, new ones on the top: > > - SB-KERNEL::INVALIDATE-LAYOUT > > 11: (CERROR "Ignore the concurrent access > 12: ((FLET SB-IMPL::ERROR-FUN)) > 13: (REMHASH #<SB-KERNEL:STANDARD-CLASSOI > 14: (SB-KERNEL::INVALIDATE-LAYOUT #<SB-PC > 15: (SB-KERNEL:REGISTER-LAYOUT #<SB-PCL:: > 16: (SB-PCL::UPDATE-LISP-CLASS-LAYOUT #<S > 17: (SB-PCL::UPDATE-SLOTS #<STANDARD-LAYE > 18: (SB-PCL::UPDATE-CLASS #<STANDARD-LAYE > 19: (SB-PCL::UPDATE-CLASS #<STANDARD-LAYE > 20: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT- > 21: (ENSURE-FINALIZED #<STANDARD-LAYER-CL > |
From: Attila L. <att...@gm...> - 2009-09-21 16:20:53
|
fyi, i just saw another one of this. this happened with 1.0.31.17 while asdf load-op-ing a big system in slime (head). i'm a bit confused which other thread was writing the package hashtable right at that time, but it did happen. dispatch-event: (:WRITE-STRING "; compiling (IN-PACKAGE :HU.DWIM.QUASI-QUOTE)") WRITE: (:write-string "; compiling (IN-PACKAGE :HU.DWIM.QUASI-QUOTE)") dispatch-event: (:WRITE-STRING " ; compiling (DEFPACKAGE :HU.DWIM.QUASI-QUOTE.XML ...)") close-connection: Concurrent access to #<HASH-TABLE :TEST COMMON-LISP:EQUAL :COUNT 160 {1000246E71}> ... ;; Event history end. ;; Backtrace: (0 ((LAMBDA (SWANK-BACKEND::DEBUGGER-LOOP-FN)) #<FUNCTION (LAMBDA #) {10034DABE9}>)) (1 (SWANK::SAFE-BACKTRACE)) (2 ((FLET #:LAMBDA1489) #<SWANK::SWANK-ERROR {1002C20741}>)) (3 (SIGNAL #<SWANK::SWANK-ERROR {1002C20741}>) [:EXTERNAL]) (4 (ERROR #<SWANK::SWANK-ERROR {1002C20741}>) [:EXTERNAL]) (5 ((FLET #:LAMBDA2567) #<SIMPLE-ERROR {1002AE58B1}>)) (6 (SIGNAL #<SIMPLE-ERROR {1002AE58B1}>) [:EXTERNAL]) (7 (CERROR "Ignore the concurrent access" "Concurrent access to ~A") [:EXTERNAL]) (8 ((FLET SB-IMPL::ERROR-FUN))) (9 ((FLET #:BODY-FUN-[GETHASH3]220))) (10 (SB-IMPL::GETHASH3 "COMMON-LISP-USER" #<HASH-TABLE :TEST EQUAL :COUNT 160 {1000246E71}> NIL)) (11 ((FLET SB-IMPL::FIND-PACKAGE-FROM-STRING) "COMMON-LISP-USER")) (12 (FIND-PACKAGE "COMMON-LISP-USER")) (13 (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (LAMBDA #) {1002AE5779}>)) (14 (SWANK::ENCODE-MESSAGE (:WRITE-STRING "\n; compiling (DEFPACKAGE :HU.DWIM.QUASI-QUOTE.XML ...)") #<SB-SYS:FD-STREAM for "a socket" {1002EDE001}>)) (15 (SWANK::DISPATCH-LOOP #<SWANK::CONNECTION {1002EDF6E1}>)) (16 (SWANK::CONTROL-THREAD #<SWANK::CONNECTION {1002EDF6E1}>)) (17 ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK382]387))) (18 ((FLET SB-THREAD::WITH-MUTEX-THUNK))) (19 ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]267))) (20 (SB-THREAD::CALL-WITH-MUTEX ..)) (21 ((LAMBDA ()))) (22 ("foreign function: #x422300")) (23 ("foreign function: #x419247")) ;; Connection to Emacs lost. [ ;; condition: Concurrent access to #<HASH-TABLE :TEST EQUAL :COUNT 160 {1000246E71}> ;; type: SWANK::SWANK-ERROR ;; encoding: NIL style: :SPAWN dedicated: NIL] -- attila |