summaryrefslogtreecommitdiffstats
path: root/Python/pystate.c
diff options
context:
space:
mode:
authorFred Drake <fdrake@acm.org>2001-06-27 19:19:46 (GMT)
committerFred Drake <fdrake@acm.org>2001-06-27 19:19:46 (GMT)
commit5755ce693dfc497389ab89e8ae0e62c3cc89d4ff (patch)
tree1a6eac014a12e3c1094ac93cc976c621d3de9870 /Python/pystate.c
parent55fb6e037170ddb645c552079ec8fe6c042de542 (diff)
downloadcpython-5755ce693dfc497389ab89e8ae0e62c3cc89d4ff.zip
cpython-5755ce693dfc497389ab89e8ae0e62c3cc89d4ff.tar.gz
cpython-5755ce693dfc497389ab89e8ae0e62c3cc89d4ff.tar.bz2
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.
Diffstat (limited to 'Python/pystate.c')
-rw-r--r--Python/pystate.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/Python/pystate.c b/Python/pystate.c
index 8e5896a..192c4c1 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -120,8 +120,10 @@ PyThreadState_New(PyInterpreterState *interp)
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 @@ PyThreadState_Clear(PyThreadState *tstate)
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);
}