[Stackless-checkins] CVS: slpdev/src/2.3/dev/Stackless/module scheduling.c, 1.100, 1.101 stacklessmodule.c, 1.174, 1.175

Christian Tismer tismer at centera.de
Thu Jun 3 14:19:17 CEST 2004


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

Modified Files:
	scheduling.c stacklessmodule.c 
Log Message:
enhancements to the tests: they all run soft and hard.
auto-scheduling now obeys schedlock.
scheduler callback can raise an error, now.

Index: scheduling.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/scheduling.c,v
retrieving revision 1.100
retrieving revision 1.101
diff -C2 -d -r1.100 -r1.101
*** scheduling.c	2 Jun 2004 23:03:42 -0000	1.100
--- scheduling.c	3 Jun 2004 12:19:14 -0000	1.101
***************
*** 301,305 ****
  /* scheduler monitoring */
  
! void
  slp_schedule_callback(PyTaskletObject *prev, PyTaskletObject *next)
  {
--- 301,305 ----
  /* scheduler monitoring */
  
! int
  slp_schedule_callback(PyTaskletObject *prev, PyTaskletObject *next)
  {
***************
*** 323,339 ****
  		Py_XDECREF(ret);
  		Py_DECREF(args);
  	}
  }
  
  #define NOTIFY_SCHEDULE(prev, next, errflag) \
  	if (_slp_schedule_fasthook != NULL) { \
! 		if (ts->st.schedlock) \
  			RUNTIME_ERROR( \
  			    "Recursive scheduler call due to callbacks!", \
  			    errflag); \
!         ts->st.schedlock = 1; \
!         _slp_schedule_fasthook(prev, next); \
!         ts->st.schedlock = 0; \
!     }
  
  static void
--- 323,346 ----
  		Py_XDECREF(ret);
  		Py_DECREF(args);
+ 		return ret ? 0 : -1;
  	}
+ 	else
+ 		return -1;
  }
  
  #define NOTIFY_SCHEDULE(prev, next, errflag) \
  	if (_slp_schedule_fasthook != NULL) { \
! 		int ret; \
! 		if (ts->st.schedlock) { \
! { __asm int 3} \
  			RUNTIME_ERROR( \
  			    "Recursive scheduler call due to callbacks!", \
  			    errflag); \
! 		} \
! 		ts->st.schedlock = 1; \
! 		ret = _slp_schedule_fasthook(prev, next); \
! 		ts->st.schedlock = 0; \
! 		if (ret) return errflag; \
! 	}
  
  static void

Index: stacklessmodule.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/stacklessmodule.c,v
retrieving revision 1.174
retrieving revision 1.175
diff -C2 -d -r1.174 -r1.175
*** stacklessmodule.c	2 Jun 2004 23:03:42 -0000	1.174
--- stacklessmodule.c	3 Jun 2004 12:19:14 -0000	1.175
***************
*** 189,193 ****
  	 * if nesting_level is relevant 
  	 */
! 	if (current->flags.atomic ||
  	    ( ts->st.nesting_level && !current->flags.ignore_nesting ) ) {
  		ts->st.ticker = ts->st.interval;
--- 189,193 ----
  	 * if nesting_level is relevant 
  	 */
! 	if (current->flags.atomic || ts->st.schedlock ||
  	    ( ts->st.nesting_level && !current->flags.ignore_nesting ) ) {
  		ts->st.ticker = ts->st.interval;


_______________________________________________
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