[Stackless-checkins] CVS: slpdev/src/2.3/dev/Stackless/module channelobject.c, 1.49, 1.50 flextype.c, 1.11, 1.12 scheduling.c, 1.99, 1.100 stacklessmodule.c, 1.173, 1.174

Christian Tismer tismer at centera.de
Thu Jun 3 01:03:46 CEST 2004


Update of /home/cvs/slpdev/src/2.3/dev/Stackless/module
In directory centera.de:/tmp/cvs-serv3004/Stackless/module

Modified Files:
	channelobject.c flextype.c scheduling.c stacklessmodule.c 
Log Message:
Stackless 3.1 almost ready.
All tests are working, both Python and Stackless,
both soft and hard switching.

New features:
channels are working cross-thread!
Stack protection for eval_frame and pickling is complete.

A couple of smallish features are missing:
pickling of channels
refuse running tasklets from foreign threads
channel.transfer
scheduling strategy cross-thread
cframe pickling, get rid of invalid_exec funcs, instead use
the missing cframe owner-tasklet pointer!
add more tests!

Index: channelobject.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/channelobject.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -C2 -d -r1.49 -r1.50
*** channelobject.c	24 May 2004 17:42:14 -0000	1.49
--- channelobject.c	2 Jun 2004 23:03:42 -0000	1.50
***************
*** 427,430 ****
--- 427,431 ----
  		if (interthread) {
  			/* interthread, always keep target! */
+ 			slp_current_insert(target);
  		}
  		else {
***************
*** 549,558 ****
  						klass, args);
  	STACKLESS_ASSERT();
! 	if (retval == NULL) {
  		goto err_exit;
  	}
- 	else if (STACKLESS_UNWINDING(retval)) {
- 		return retval;
- 	}
  	Py_INCREF(Py_None);
  	retval = Py_None;
--- 550,556 ----
  						klass, args);
  	STACKLESS_ASSERT();
! 	if (retval == NULL || STACKLESS_UNWINDING(retval)) {
  		goto err_exit;
  	}
  	Py_INCREF(Py_None);
  	retval = Py_None;

Index: flextype.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/flextype.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** flextype.c	24 May 2004 01:01:20 -0000	1.11
--- flextype.c	2 Jun 2004 23:03:42 -0000	1.12
***************
*** 137,141 ****
  	reset_gc( (PyTypeObject *) type);
  #endif
! 	if (bindmethods(&type->type.type)) {
  		Py_DECREF((PyObject *) type);
  		return NULL;
--- 137,141 ----
  	reset_gc( (PyTypeObject *) type);
  #endif
! 	if (bindmethods((PyTypeObject *) type)) {
  		Py_DECREF((PyObject *) type);
  		return NULL;

Index: scheduling.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/scheduling.c,v
retrieving revision 1.99
retrieving revision 1.100
diff -C2 -d -r1.99 -r1.100
*** scheduling.c	24 May 2004 23:36:20 -0000	1.99
--- scheduling.c	2 Jun 2004 23:03:42 -0000	1.100
***************
*** 381,385 ****
  	ts->exc_value = cf->ob2;
  	ts->exc_traceback = cf->ob3;
! 	cf->ob2 = cf->ob2 = cf->ob3 = NULL;
  	Py_DECREF(cf);
  	ts->frame = f;
--- 381,385 ----
  	ts->exc_value = cf->ob2;
  	ts->exc_traceback = cf->ob3;
! 	cf->ob1 = cf->ob2 = cf->ob3 = NULL;
  	Py_DECREF(cf);
  	ts->frame = f;

Index: stacklessmodule.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/stacklessmodule.c,v
retrieving revision 1.173
retrieving revision 1.174
diff -C2 -d -r1.173 -r1.174
*** stacklessmodule.c	24 May 2004 01:45:38 -0000	1.173
--- stacklessmodule.c	2 Jun 2004 23:03:42 -0000	1.174
***************
*** 12,15 ****
--- 12,16 ----
  #include "channelobject.h"
  #include "pickling/prickelpit.h"
+ #include "core/stackless_methods.h"
  
  /******************************************************
***************
*** 192,196 ****
  		ts->st.ticker = ts->st.interval;
  		current->flags.pending_irq = 1;
! 		/* no incref, just a flag */
  		return Py_None;
  	}
--- 193,197 ----
  		ts->st.ticker = ts->st.interval;
  		current->flags.pending_irq = 1;
! 		Py_INCREF(Py_None);
  		return Py_None;
  	}
***************
*** 198,204 ****
  		current->flags.pending_irq = 0;
  
- 	Py_INCREF(ts->st.main);
- 	slp_current_insert(ts->st.main);
- 	
  	return slp_schedule_task(ts->st.current, ts->st.main, 1);
  }
--- 199,202 ----
***************
*** 955,958 ****
--- 953,966 ----
  }
  
+ static int init_stackless_methods()
+ {
+ 	_stackless_method *p = _stackless_methtable;
+ 
+ 	for (; p->type != NULL; p++) {
+ 		((signed char *) p->type)[p->offset] = -1;
+ 	}
+ 	return 0;
+ }
+ 
  /* this one must be called very early, before modules are used */
  
***************
*** 961,964 ****
--- 969,973 ----
  {
  	if (0
+ 	    || init_stackless_methods()
  	    || init_cframetype()
  	    || init_flextype()


_______________________________________________
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