In the LDB case (backtrace below), the ERROR ends up causing a call to GETHASH, which does a WITHOUT-GCING, which tries to run pending GCs when it finishes, and we lose() since we were already trying to GC when the deadlock check started. Not sure why it only happens some of the time though.
In the LDB case (backtrace below), the ERROR ends up causing a call to GETHASH, which does a WITHOUT-GCING, which tries to run pending GCs when it finishes, and we lose() since we were already trying to GC when the deadlock check started. Not sure why it only happens some of the time though.
WARNING: DEADLOCK CYCLE DETECTED:
#<SB- THREAD: THREAD "d2" waiting for: THREAD: THREAD "i" #2=waiting for: # {1002E50261}>>
#<MUTEX "GC lock"
owner: #1=#<SB-
{1002DD0081}>
#<SB- THREAD: THREAD "i" waiting for: THREAD: THREAD "d2" #2=waiting for: # {1002DD0081}>>
#<MUTEX "World Lock"
owner: #1=#<SB-
{1002E50261}>
END OF CYCLE
fatal error encountered in SBCL pid 19497(tid 140737271953152):
Trapping to run pending handler while GC in progress.
Welcome to LDB, a low-level debugger for the Lisp runtime environment. :CALL-WITH- RECURSIVE- SYSTEM- SPINLOCK/ WITHOUT- GCING :WITH-RECURSIVE -SYSTEM- SPINLOCK- THUNK) INTERRUPTS- BODY-[CALL- WITH-RECURSIVE- SYSTEM- SPINLOCK] 245) MAKE-COMPILED- DEBUG-FUN HAIRY-ARG- PROCESSOR SB-DI:: COMPUTE- CALLING- FRAME) :FIND-CALLER- NAME-AND- FRAME VARARGS- ENTRY COMMON-LISP::ERROR) :CHECK- DEADLOCK HAIRY-ARG- PROCESSOR SB-THREAD: :GET-MUTEX) INTERRUPTS- BODY-[CALL- WITH-MUTEX] 301) INTERRUPTS- BODY-[SUB- GC]27) VARARGS- ENTRY SB-KERNEL::SUB-GC) handle_ pending, fp = 0x7ffff319cf70, ra = 0x412189 VARARGS- ENTRY (SB-PCL::EMF COMMON- LISP::INITIALIZ E-INSTANCE) ) VARARGS- ENTRY (SB-PCL: :FAST-METHOD COMMON- LISP::MAKE- INSTANCE (COMMON- LISP::CLASS) )) :FAST-METHOD SB-MOP: :COMPUTE- EFFECTIVE- SLOT-DEFINITION (SB-PCL::SLOT-CLASS COMMON-LISP::T COMMON-LISP::T)) :STD-COMPUTE- SLOTS :FAST-METHOD SB-MOP: :COMPUTE- SLOTS KEYWORD::AROUND (COMMON- LISP::STANDARD- CLASS)) :WITH-RECURSIVE -LOCK-THUNK) INTERRUPTS- BODY-[CALL- WITH-RECURSIVE- LOCK]325) :CALL-WITH- RECURSIVE- LOCK :UPDATE- CLASS :WITH-RECURSIVE -LOCK-THUNK) INTERRUPTS- BODY-[CALL- WITH-RECURSIVE- LOCK]325) :CALL-WITH- RECURSIVE- LOCK :UPDATE- CLASS VARARGS- ENTRY (SB-PCL: :FAST-METHOD COMMON- LISP::SHARED- INITIALIZE KEYWORD::AFTER (SB-PCL::STD-CLASS COMMON-LISP::T))) VARARGS- ENTRY (SB-PCL::EMF COMMON- LISP::SHARED- INITIALIZE) ) VARARGS- ENTRY (SB-PCL: :FAST-METHOD COMMON- LISP::REINITIAL IZE-INSTANCE (SB-PCL: :SLOT-OBJECT) )) VARARGS- ENTRY (SB-PCL::EMF COMMON- LISP::REINITIAL IZE-INSTANCE) ) :WITH-RECURSIVE -LOCK-THUNK) INTERRUPTS- BODY-[CALL- WITH-RECURSIVE- LOCK]325) :CALL-WITH- RECURSIVE- LOCK VARARGS- ENTRY (SB-PCL: :FAST-METHOD SB-MOP: :ENSURE- CLASS-USING- CLASS (SB-PCL::PCL-CLASS COMMON-LISP::T))) INTERRUPTS- BODY-[CALL- WITH-RECURSIVE- LOCK]325) :CALL-WITH- RECURSIVE- LOCK VARARGS- ENTRY SB-MOP: :ENSURE- CLASS) :REAL-LOAD- DEFCLASS LISP::LAMBDA ()) INTERRUPTS- BODY-[BLOCK414] 419) :WITH-MUTEX- THUNK) INTERRUPTS- BODY-[CALL- WITH-MUTEX] 301) :CALL-WITH- MUTEX :INITIAL- THREAD- FUNCTION trampoline, fp = 0x7ffff319eeb0, ra = 0x4188c7
ldb> ba
Backtrace:
0: Foreign function lose, fp = 0x7ffff319c080, ra = 0x40fc72
1: Foreign function (null), fp = 0x7ffff319c0b0, ra = 0x412214
2: Foreign function (null), fp = 0x7ffff319c0f0, ra = 0x4130ca
3: Foreign function (null), fp = 0x7ffff319c610, ra = 0x7ffff79cab40
4: SB-THREAD:
5: SB-IMPL::GETHASH3
6: (COMMON-LISP::FLET SB-THREAD:
7: (COMMON-LISP::FLET WITHOUT-
8: SB-DI::
9: (SB-C::
10: SB-KERNEL:
11: (SB-C::
12: SB-THREAD:
13: (SB-C::
14: (COMMON-LISP::FLET WITHOUT-
15: (COMMON-LISP::FLET WITHOUT-
16: (SB-C::
17: Foreign function call_into_lisp, fp = 0x7ffff319cf10, ra = 0x4220b0
18: Foreign function maybe_gc, fp = 0x7ffff319cf40, ra = 0x40d374
19: Foreign function interrupt_
20: Foreign function (null), fp = 0x7ffff319cfb0, ra = 0x4130ca
21: Foreign function (null), fp = 0x7ffff319d510, ra = 0x7ffff79cab40
22: (SB-C::
23: (SB-C::
24: (SB-PCL:
25: SB-PCL:
26: (SB-PCL:
27: (COMMON-LISP::FLET SB-THREAD:
28: (COMMON-LISP::FLET WITHOUT-
29: SB-THREAD:
30: SB-PCL:
31: (COMMON-LISP::FLET SB-THREAD:
32: (COMMON-LISP::FLET WITHOUT-
33: SB-THREAD:
34: SB-PCL:
35: (SB-C::
36: (SB-C::
37: (SB-C::
38: (SB-C::
39: (COMMON-LISP::FLET SB-THREAD:
40: (COMMON-LISP::FLET WITHOUT-
41: SB-THREAD:
42: (SB-C::
43: (COMMON-LISP::FLET WITHOUT-
44: SB-THREAD:
45: (SB-C::
46: SB-PCL:
47: (COMMON-
48: (COMMON-LISP::FLET WITHOUT-
49: (COMMON-LISP::FLET SB-THREAD:
50: (COMMON-LISP::FLET WITHOUT-
51: SB-THREAD:
52: SB-THREAD:
53: Foreign function call_into_lisp, fp = 0x7ffff319ee90, ra = 0x4220b0
54: Foreign function new_thread_