]> granicus.if.org Git - python/commitdiff
improve tracing performance when f_trace is NULL (closes #16672)
authorBenjamin Peterson <benjamin@python.org>
Mon, 24 Dec 2012 17:53:30 +0000 (11:53 -0600)
committerBenjamin Peterson <benjamin@python.org>
Mon, 24 Dec 2012 17:53:30 +0000 (11:53 -0600)
Patch by Xavier de Gaye.

Misc/NEWS
Python/ceval.c

index 6175be1a94406906691b459256ecb09a7069aa89..36d305dfb9b7236c8e09ab0127be00db5017495b 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,8 @@ What's New in Python 3.4.0 Alpha 1?
 Core and Builtins
 -----------------
 
+- Issue #16672: Improve performance tracing performance
+
 - Issue #14470: Remove w9xpopen support per PEP 11.
 
 - Issue #9856: Replace deprecation warning with raising TypeError
index 32c203ecbcf030aaa73d5dd16de4c6eafe668404..5f6f35cb54f7c105b6032767095a529d73e88f85 100644 (file)
@@ -1277,7 +1277,8 @@ PyEval_EvalFrameEx(PyFrameObject *f, int throwflag)
         /* line-by-line tracing support */
 
         if (_Py_TracingPossible &&
-            tstate->c_tracefunc != NULL && !tstate->tracing) {
+                tstate->c_tracefunc != NULL && !tstate->tracing &&
+                f->f_trace != NULL) {
             int err;
             /* see maybe_call_line_trace
                for expository comments */
@@ -3008,7 +3009,7 @@ error:
         /* Log traceback info. */
         PyTraceBack_Here(f);
 
-        if (tstate->c_tracefunc != NULL)
+        if (tstate->c_tracefunc != NULL && f->f_trace != NULL)
             call_exc_trace(tstate->c_tracefunc, tstate->c_traceobj, f);
 
 fast_block_end:
@@ -3127,7 +3128,7 @@ fast_yield:
     }
 
     if (tstate->use_tracing) {
-        if (tstate->c_tracefunc) {
+        if (tstate->c_tracefunc && f->f_trace != NULL) {
             if (why == WHY_RETURN || why == WHY_YIELD) {
                 if (call_trace(tstate->c_tracefunc,
                                tstate->c_traceobj, f,