[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