[Stackless] a stackless crash
Kristján Valur Jónsson
kristjan at ccpgames.com
Mon Nov 5 12:55:12 CET 2007
I don't think this is an issue.
Remember, the channel is being destroyed because the last reference just went away.
Even if the tasklet catches the exception it can't reinsert itself into it because it has no reference, i.e. it knows nothing of the channel anymore.
Something like this can really only happen in custom C code like I showed, but that code has special 'check if pointer is null' logic before accessing the channel.
Killing the tasklets at the time we are destroying the channel seems like a much better place to do it and may even make the late "kill tasklets with cstacks" code unnecessary.
From: Christian Tismer [mailto:tismer at stackless.com]
Sent: Saturday, November 03, 2007 23:58
To: Richard Tew
Cc: Kristján Valur Jónsson; Stackless mailing list
Subject: Re: [Stackless] a stackless crash
Richard Tew wrote:
> On 11/2/07, Kristján Valur Jónsson <kristjan at ccpgames.com> wrote:
>> Attached are the files for easy repro.
>> Build _crash.cpp into a _crash_d.pyd, place it next to crash.py and do:
>> python_d crash.py
>> You may want to set a breakpoint in channelobject.c, line 29, to catch the point where the tasklet is unlinked from the channel and left to die.
> My vote would go for channel_clear explicitly killing the tasklets
> blocked on the given channel. What I take from this bug is that it is
> not enough to hope that they die, we need to engage in some tasklet
> euthanasia for the common good.
But how to do that?
You cannot avoid to revive them, and you cannot stop from
catching an exception. They can even re-insert themselves into
the channel, immediately.
Maybe it is necessary to make all stackless-related functions
fail for dying tasklets during destruction?
I think there is this zombie flag. We might use that to
thinking more -- 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