[Stackless] Explicit yield/break to Preemptive Stackless Loop
Jeff Senn
senn at maya.com
Thu Nov 9 14:31:41 CET 2006
On Nov 9, 2006, at 6:50 AM, Richard Tew wrote:
> On 11/4/06, Brian Hardie <bhardie at cs.usfca.edu> wrote:
>> schedule_task_block(PyTaskletObject *prev, int stackless)
>> {
>> ...
>> if (check_for_deadlock()) {
>> /*revive real main if floating */
>> if (ts == slp_initial_tstate && ts->st.main->next == NULL) {
>> /* emulate old revive main behavior:
>> * passing a value only if it is an exception
>> ...
>>
>> I think the expression 'ts == slp_initial_tstate' is checking to
>> see if
>> we are running within the main thread. If so, it recovers the main
>> tasklet. My tasklets are not run by the main thread; perhaps this
>> has
>> been a problem.
D'oh. I didn't actually answer your question.
I'm a little bit guessing, but to me it looks like
we should remove that 'ts == slp_initial_tstate'
since (I think?) we want that deadlock behavior in all threads...
(and each thread's "main tasklet" can sort out any inter-thread
blocking)
We should probably review the other places a comparison
with slp_initial_tstate is made...
The one in slp_schedule_task (and a couple in taskletobject.c)
that bracket calls to slp_ensure_linkage... I'm not completely
sure about. Perhaps it is sufficient to always just call
slp_ensure_linkage. Christian?
The one in tasklet_end looks ok.
-Jas
_______________________________________________
Stackless mailing list
Stackless at stackless.com
http://www.stackless.com/mailman/listinfo/stackless
More information about the Stackless
mailing list