[Stackless] A new crash bug
Kristján Valur Jónsson
kristjan at ccpgames.com
Mon Oct 22 15:28:49 CEST 2007
Okay I have finally figured out what is happening.
The main tasklet is in garbage collection. It has a list called "unreachable" and its head is on the stack.
During colleection of the unreachable objects, we switch to a different tasklet.
During that tasklet´s execution, some objects in "unreachable" are unlinked. That is, final collection occurs there.
However, "unreachable" is now in a different and invalid stack frame and so a memory corruption will occur.
The fix is to make "unreachable" a static variable. This should be ok, since python threading model precludes more than one thread doing GC, and gc.collect() is not reentrant anyway.
Richard, can you do this for me and try with your vintage compilers?
From: Christian Tismer [mailto:tismer at stackless.com]
Sent: Sunday, October 21, 2007 11:54
To: Kristján Valur Jónsson
Cc: Richard Tew; Stackless mailing list
Subject: Re: [Stackless] A new crash bug
Kristján Valur Jónsson wrote:
> 1) Yes, the failure actually happened when gc_clear() is called on
> the channel. There are some four objects in the 'unreacable'
> list at this time (including the frame belonging to the tasklet)
> but it is the channel that is called first, and during the
> awakening of the tasklet object that the longjump-like behaviour
> appears. As I said, I really have to singlestep further, since
> the "step over" feature of the debugger is broken by the stackless
> stack switching. Whenever I step over stuff, I find myself in
> the crash case...
Just as a hint: If you put a breakpoint into the slp_switch
asm code right before the stack change, then you are protected
from loosing control and getting into the crash case.
You just need to single step over those 3 or 4 instructions,
then you can continue faster.
Of course it is always a hassle to do this...
ciao - chris
Christian Tismer :^) <mailto:tismer at stackless.com>
tismerysoft GmbH : Have a break! Take a ride on Python's
Johannes-Niemeyer-Weg 9A : *Starship* http://starship.python.net/
14109 Berlin : PGP key -> http://wwwkeys.pgp.net/
work +49 30 802 86 56 mobile +49 173 24 18 776 fax +49 30 80 90 57 05
PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04
whom do you want to sponsor today? http://www.stackless.com/
More information about the Stackless