Comment 3 for bug 807475

Revision history for this message
3b (00003b) wrote :

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:
        #<MUTEX "GC lock"
            owner: #1=#<SB-THREAD:THREAD "i" #2=waiting for: # {1002E50261}>>
      {1002DD0081}>

   #<SB-THREAD:THREAD "i" waiting for:
        #<MUTEX "World Lock"
            owner: #1=#<SB-THREAD:THREAD "d2" #2=waiting for: # {1002DD0081}>>
      {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.
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::CALL-WITH-RECURSIVE-SYSTEM-SPINLOCK/WITHOUT-GCING
   5: SB-IMPL::GETHASH3
   6: (COMMON-LISP::FLET SB-THREAD::WITH-RECURSIVE-SYSTEM-SPINLOCK-THUNK)
   7: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-SYSTEM-SPINLOCK]245)
   8: SB-DI::MAKE-COMPILED-DEBUG-FUN
   9: (SB-C::HAIRY-ARG-PROCESSOR SB-DI::COMPUTE-CALLING-FRAME)
  10: SB-KERNEL::FIND-CALLER-NAME-AND-FRAME
  11: (SB-C::VARARGS-ENTRY COMMON-LISP::ERROR)
  12: SB-THREAD::CHECK-DEADLOCK
  13: (SB-C::HAIRY-ARG-PROCESSOR SB-THREAD::GET-MUTEX)
  14: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]301)
  15: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[SUB-GC]27)
  16: (SB-C::VARARGS-ENTRY SB-KERNEL::SUB-GC)
  17: Foreign function call_into_lisp, fp = 0x7ffff319cf10, ra = 0x4220b0
  18: Foreign function maybe_gc, fp = 0x7ffff319cf40, ra = 0x40d374
  19: Foreign function interrupt_handle_pending, fp = 0x7ffff319cf70, ra = 0x412189
  20: Foreign function (null), fp = 0x7ffff319cfb0, ra = 0x4130ca
  21: Foreign function (null), fp = 0x7ffff319d510, ra = 0x7ffff79cab40
  22: (SB-C::VARARGS-ENTRY (SB-PCL::EMF COMMON-LISP::INITIALIZE-INSTANCE))
  23: (SB-C::VARARGS-ENTRY (SB-PCL::FAST-METHOD COMMON-LISP::MAKE-INSTANCE (COMMON-LISP::CLASS)))
  24: (SB-PCL::FAST-METHOD SB-MOP::COMPUTE-EFFECTIVE-SLOT-DEFINITION (SB-PCL::SLOT-CLASS COMMON-LISP::T COMMON-LISP::T))
  25: SB-PCL::STD-COMPUTE-SLOTS
  26: (SB-PCL::FAST-METHOD SB-MOP::COMPUTE-SLOTS KEYWORD::AROUND (COMMON-LISP::STANDARD-CLASS))
  27: (COMMON-LISP::FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK)
  28: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]325)
  29: SB-THREAD::CALL-WITH-RECURSIVE-LOCK
  30: SB-PCL::UPDATE-CLASS
  31: (COMMON-LISP::FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK)
  32: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]325)
  33: SB-THREAD::CALL-WITH-RECURSIVE-LOCK
  34: SB-PCL::UPDATE-CLASS
  35: (SB-C::VARARGS-ENTRY (SB-PCL::FAST-METHOD COMMON-LISP::SHARED-INITIALIZE KEYWORD::AFTER (SB-PCL::STD-CLASS COMMON-LISP::T)))
  36: (SB-C::VARARGS-ENTRY (SB-PCL::EMF COMMON-LISP::SHARED-INITIALIZE))
  37: (SB-C::VARARGS-ENTRY (SB-PCL::FAST-METHOD COMMON-LISP::REINITIALIZE-INSTANCE (SB-PCL::SLOT-OBJECT)))
  38: (SB-C::VARARGS-ENTRY (SB-PCL::EMF COMMON-LISP::REINITIALIZE-INSTANCE))
  39: (COMMON-LISP::FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK)
  40: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]325)
  41: SB-THREAD::CALL-WITH-RECURSIVE-LOCK
  42: (SB-C::VARARGS-ENTRY (SB-PCL::FAST-METHOD SB-MOP::ENSURE-CLASS-USING-CLASS (SB-PCL::PCL-CLASS COMMON-LISP::T)))
  43: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]325)
  44: SB-THREAD::CALL-WITH-RECURSIVE-LOCK
  45: (SB-C::VARARGS-ENTRY SB-MOP::ENSURE-CLASS)
  46: SB-PCL::REAL-LOAD-DEFCLASS
  47: (COMMON-LISP::LAMBDA ())
  48: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[BLOCK414]419)
  49: (COMMON-LISP::FLET SB-THREAD::WITH-MUTEX-THUNK)
  50: (COMMON-LISP::FLET WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]301)
  51: SB-THREAD::CALL-WITH-MUTEX
  52: SB-THREAD::INITIAL-THREAD-FUNCTION
  53: Foreign function call_into_lisp, fp = 0x7ffff319ee90, ra = 0x4220b0
  54: Foreign function new_thread_trampoline, fp = 0x7ffff319eeb0, ra = 0x4188c7