[Stackless-checkins] CVS: slpdev/src/2.3/dev/Stackless scheduling.c, 1.85, 1.86 stacklesseval.c, 1.137, 1.138 switch_x86_msvc.h, 1.29, 1.30
Christian Tismer
tismer at centera.de
Wed Apr 7 19:23:42 CEST 2004
Update of /home/cvs/slpdev/src/2.3/dev/Stackless
In directory centera.de:/tmp/cvs-serv15965/src/2.3/dev/Stackless
Modified Files:
scheduling.c stacklesseval.c switch_x86_msvc.h
Log Message:
cured a really bad bug in the Windows stack switching code.
This turned up, after I de-virtualized the cstack operations,
and less registers were used.
Also clarified a possibly dangling pointer from cstack to tasklet.
And TaskletExit inherits from SystemExit, now.
Index: scheduling.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/scheduling.c,v
retrieving revision 1.85
retrieving revision 1.86
diff -C2 -d -r1.85 -r1.86
*** scheduling.c 25 Mar 2004 22:59:07 -0000 1.85
--- scheduling.c 7 Apr 2004 17:23:40 -0000 1.86
***************
*** 126,129 ****
--- 126,132 ----
PyCStackObject **cstprev;
+ if (next == prev)
+ return 0;
+
/* since we change the stack we must assure that the protocol was met */
STACKLESS_ASSERT();
***************
*** 477,482 ****
task->tempval = result;
slp_current_remove();
-
Py_DECREF(task);
--- 480,485 ----
task->tempval = result;
+ ts->st.current = task;
slp_current_remove();
Py_DECREF(task);
Index: stacklesseval.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/stacklesseval.c,v
retrieving revision 1.137
retrieving revision 1.138
diff -C2 -d -r1.137 -r1.138
*** stacklesseval.c 31 Mar 2004 01:26:36 -0000 1.137
--- stacklesseval.c 7 Apr 2004 17:23:40 -0000 1.138
***************
*** 137,140 ****
--- 137,142 ----
slp_cstack_restore(PyCStackObject *cst)
{
+ /* mark task as no longer responsible for cstack instance */
+ cst->task = NULL;
memcpy(cst->startaddr - cst->ob_size, &cst->stack, (cst->ob_size) * sizeof(int*));
}
Index: switch_x86_msvc.h
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/switch_x86_msvc.h,v
retrieving revision 1.29
retrieving revision 1.30
diff -C2 -d -r1.29 -r1.30
*** switch_x86_msvc.h 24 Nov 2002 15:37:10 -0000 1.29
--- switch_x86_msvc.h 7 Apr 2004 17:23:40 -0000 1.30
***************
*** 31,41 ****
#define STACK_MAGIC 0
! __forceinline static int
slp_switch(void)
{
register int *stackref, stsizediff;
__asm mov stackref, esp;
! /* mention EBX, ESI and EDI in order to get them preserved */
! __asm lea ebx, [esi+edi];
{
SLP_SAVE_STATE(stackref, stsizediff);
--- 31,42 ----
#define STACK_MAGIC 0
! static int
slp_switch(void)
{
register int *stackref, stsizediff;
__asm mov stackref, esp;
! /* modify EBX, ESI and EDI in order to get them preserved */
! __asm mov ebx, ebx;
! __asm xchg esi, edi;
{
SLP_SAVE_STATE(stackref, stsizediff);
_______________________________________________
Stackless-checkins mailing list
Stackless-checkins at stackless.com
http://www.stackless.com/mailman/listinfo/stackless-checkins
More information about the Stackless-checkins
mailing list