diff options
author | Fred Drake <fdrake@acm.org> | 2001-06-27 19:19:46 +0000 |
---|---|---|
committer | Fred Drake <fdrake@acm.org> | 2001-06-27 19:19:46 +0000 |
commit | 5755ce693dfc497389ab89e8ae0e62c3cc89d4ff (patch) | |
tree | 1a6eac014a12e3c1094ac93cc976c621d3de9870 /Python/pystate.c | |
parent | 55fb6e037170ddb645c552079ec8fe6c042de542 (diff) | |
download | cpython-git-5755ce693dfc497389ab89e8ae0e62c3cc89d4ff.tar.gz |
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.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index 8e5896a44f..192c4c14f6 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); } |