diff Python/pystate.c @ 18326:e427afb5637f legacy-trunk

Revise the interface to the profiling and tracing support for the Python interpreter. This change adds two new C-level APIs: PyEval_SetProfile() and PyEval_SetTrace(). These can be used to install profile and trace functions implemented in C, which can operate at much higher speeds than Python-based functions. The overhead for calling a C-based profile function is a very small fraction of a percent of the overhead involved in calling a Python-based function. The machinery required to call a Python-based profile or trace function been moved to sysmodule.c, where sys.setprofile() and sys.setprofile() simply become users of the new interface. As a side effect, SF bug #436058 is fixed; there is no longer a _PyTrace_Init() function to declare.
author Fred Drake <fdrake@acm.org>
date Wed, 27 Jun 2001 19:19:46 +0000
parents d96ce9708c00
children 3b295ce2705f
line wrap: on
line diff
--- a/Python/pystate.c	Wed Jun 27 19:18:03 2001 +0000
+++ b/Python/pystate.c	Wed Jun 27 19:19:46 2001 +0000
@@ -120,8 +120,10 @@
 		tstate->exc_value = NULL;
 		tstate->exc_traceback = NULL;
 
-		tstate->sys_profilefunc = NULL;
-		tstate->sys_tracefunc = NULL;
+		tstate->c_profilefunc = NULL;
+		tstate->c_tracefunc = NULL;
+		tstate->c_profileobj = NULL;
+		tstate->c_traceobj = NULL;
 
 		HEAD_LOCK();
 		tstate->next = interp->tstate_head;
@@ -152,8 +154,10 @@
 	ZAP(tstate->exc_value);
 	ZAP(tstate->exc_traceback);
 
-	ZAP(tstate->sys_profilefunc);
-	ZAP(tstate->sys_tracefunc);
+	tstate->c_profilefunc = NULL;
+	tstate->c_tracefunc = NULL;
+	ZAP(tstate->c_profileobj);
+	ZAP(tstate->c_traceobj);
 }