[Stackless] "Attempt to run a locked frame!"
Christian Tismer
tismer at tismer.com
Tue Feb 20 16:48:12 CET 2001
Bernd Rinn wrote:
>
> On Tue, Feb 20, 2001 at 08:35:33AM -0500, Gordon McMillan wrote:
> > Well after modifying Bernd's code so it works with 1.5.2
> > stackless (and an older uthreads that does not have "wait"), I
> > can report that it runs fine. I simply commented out the
> > uthread.wait and used delay as the select timeout.
>
> Thank you for pointing out that magic methods may cause problems with
> continuations.
>
> Can that error occur only when I am doing something stupid like
> calling 'uthread.wait()' from within a magic method or can it also
> occur by chance, when the scheduler decides to perform a task switch
> within a magic method like __init__? What can one do against that? I
> assume using atomic() leaves a little chance that the task-switch
> occurs _before_ or _after_ atomic(), so that not even
The above cannot happen, since every recursion blocks by its
uthread_lock variable which defaults to no scheduling.
It can only happen from inside out.
> def __init__(self, ...): atomic(self.myinit(...)
>
> would be completely safe. Am I right here?
Yep.
> And: Is there a way to detect if is running in a recursive
> interpreter?
Well, there is an undocumented way to do this:
Frames have a computed "locked" flag.
Something like this works:
>>> co=continuation.caller()
>>> while co:
... if co.frame.locked:
... print "locked frame"
... co = co.caller
ciao - chris
--
Christian Tismer :^) <mailto:tismer at tismer.com>
Mission Impossible 5oftware : Have a break! Take a ride on Python's
Kaunstr. 26 : *Starship* http://starship.python.net
14163 Berlin : PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint E182 71C7 1A9D 66E9 9D15 D3CC D4D7 93E2 1FAE F6DF
where do you want to jump today? http://www.stackless.com
_______________________________________________
Stackless mailing list
Stackless at starship.python.net
http://starship.python.net/mailman/listinfo/stackless
More information about the Stackless
mailing list