[Openmcl-devel] [help] kernel debugger
gb at clozure.com
Wed Jul 24 09:10:29 UTC 2013
Yes; that's definitely a screenshot of the kernel debugger. The crash
occurred in the garbage collector (in XXXXX, to be specific ...). The
GC tried to set a number of bits in a bit vector where that number is
proportional to the number of elements in some vector or vector-like
object that it's encountered, and the advertised number of elements in
that object is implausibly large.
An example of how that can happen: suppose two lisp objects X and Y
just happen to be near each other in memory, and X precedes Y. We'll
pretend that X contains 3 word-sized elements, and could visualize
this something like:
||3-elements, some type|element 0|element 1| element 2||N elements, some type| ...|
and suppose that some code like:
(defun foo (a b)
(declare (optimize (speed 3) (safety 0)))
(setf (svref a 3) b))
(foo x some-arbitrary-value)
and that'll have the effect of clobbering the first (header) word of Y
and changing the advertised size of Y.
Sometimes, memory corruption caused by unsafe and incorrect code leads
to a crash or visible problem almost immediately; sometimes, it takes
a long time for things to get bad enough to be noticable.
At some point in the not too distant past, I would have suggested that
you look at any of your code that's compiled with low safety to ensure
that that code is correct (or to disable agressive optimization.) That
advice still makes sense to me, but a lot of the code that people run
these days is code whose source they've never looked at and may not be
able to find if they wanted to. I understand that things like ASDF and
Quicklisp can be very useful to many people and I understand that it isn't
entirely appropriate to blame tools for dumbing things down, but ...
This is getting too depressing.
On Wed, 24 Jul 2013, ?? wrote:
> Greetings all.
> My web application which is running on hunchentoot stop working today.
> It? said:
> Unhandled exception 11 at XXXXX,? content->regs at XXXX
> Exception occurred while excuting foreign code
> at set_n_bits + 112
> recieved signal 11; faulting address: XXXXX
> invalidate permissions for mapped object
> ? for help
> the screenshot can be seen at?
> any ideas?
More information about the Openmcl-devel