[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