[Stackless-checkins] CVS: slpdev/src/2.3/dev/Stackless/module scheduling.c, 1.106, 1.107 stacklessmodule.c, 1.175, 1.176

Christian Tismer tismer at centera.de
Sun Jun 6 17:04:43 CEST 2004


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

Modified Files:
	scheduling.c stacklessmodule.c 
Log Message:
re-activated cstack caching, makes very much sense,
partially 30 percent more speed.
Also added caches for cframes and bombs.

Index: scheduling.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/scheduling.c,v
retrieving revision 1.106
retrieving revision 1.107
diff -C2 -d -r1.106 -r1.107
*** a/scheduling.c	6 Jun 2004 13:58:14 -0000	1.106
--- b/scheduling.c	6 Jun 2004 15:04:41 -0000	1.107
***************
*** 14,17 ****
--- 14,21 ----
   ******************************************************/
  
+ static PyBombObject *free_list = NULL;
+ static int numfree = 0;		/* number of bombs currently in free_list */
+ #define MAXFREELIST 20		/* max value for numfree */
+ 
  static void
  bomb_dealloc(PyBombObject *bomb)
***************
*** 21,25 ****
  	Py_XDECREF(bomb->curexc_value);
  	Py_XDECREF(bomb->curexc_traceback);
! 	PyObject_GC_Del(bomb);
  }
  
--- 25,35 ----
  	Py_XDECREF(bomb->curexc_value);
  	Py_XDECREF(bomb->curexc_traceback);
! 	if (numfree < MAXFREELIST) {
! 		++numfree;
! 		bomb->curexc_type = (PyObject *) free_list;
! 		free_list = bomb;
! 	}
! 	else
! 		PyObject_GC_Del(bomb);
  }
  
***************
*** 61,67 ****
  	PyBombObject *bomb;
  
! 	bomb = PyObject_GC_New(PyBombObject, &PyBomb_Type);
! 	if (bomb == NULL)
! 		return NULL;
  	bomb->curexc_type = NULL;
  	bomb->curexc_value = NULL;
--- 71,86 ----
  	PyBombObject *bomb;
  
! 	if (free_list == NULL) {
! 		bomb = PyObject_GC_New(PyBombObject, &PyBomb_Type);
! 		if (bomb == NULL)
! 			return NULL;
! 	}
! 	else {
! 		assert(numfree > 0);
! 		--numfree;
! 		bomb = free_list;
! 		free_list = (PyBombObject *) free_list->curexc_type;
! 		_Py_NewReference((PyObject *) bomb);
! 	}
  	bomb->curexc_type = NULL;
  	bomb->curexc_value = NULL;
***************
*** 1052,1054 ****
--- 1071,1087 ----
  }
  
+ /* Clear out the free list */
+ 
+ void
+ slp_scheduling_fini(void)
+ {
+ 	while (free_list != NULL) {
+ 		PyBombObject *bomb = free_list;
+ 		free_list = (PyBombObject *) free_list->curexc_type;
+ 		PyObject_GC_Del(bomb);
+ 		--numfree;
+ 	}
+ 	assert(numfree == 0);
+ }
+ 
  #endif

Index: stacklessmodule.c
===================================================================
RCS file: /home/cvs/slpdev/src/2.3/dev/Stackless/module/stacklessmodule.c,v
retrieving revision 1.175
retrieving revision 1.176
diff -C2 -d -r1.175 -r1.176
*** a/stacklessmodule.c	3 Jun 2004 12:19:14 -0000	1.175
--- b/stacklessmodule.c	6 Jun 2004 15:04:41 -0000	1.176
***************
*** 1030,1032 ****
--- 1030,1040 ----
  }
  
+ void
+ PyStackless_Fini(void)
+ {
+ 	slp_scheduling_fini();
+ 	slp_cstack_fini();
+ 	slp_stacklesseval_fini();
+ }
+ 
  #endif


_______________________________________________
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