diff options
author | Brett Cannon <bcannon@gmail.com> | 2005-06-25 07:07:35 (GMT) |
---|---|---|
committer | Brett Cannon <bcannon@gmail.com> | 2005-06-25 07:07:35 (GMT) |
commit | 55fa66dd45e76a57deca8cebaedf1a624499648b (patch) | |
tree | f25a0a1b1939d8b0b2033e932411e3bac05155cd | |
parent | 527c46996f3c78124c6c7691594fa36ded24719d (diff) | |
download | cpython-55fa66dd45e76a57deca8cebaedf1a624499648b.zip cpython-55fa66dd45e76a57deca8cebaedf1a624499648b.tar.gz cpython-55fa66dd45e76a57deca8cebaedf1a624499648b.tar.bz2 |
Add comments about PyThreadState and the usage of its fields.
-rw-r--r-- | Include/pystate.h | 6 | ||||
-rw-r--r-- | Python/ceval.c | 4 |
2 files changed, 9 insertions, 1 deletions
diff --git a/Include/pystate.h b/Include/pystate.h index 1ff2626..bfd3548 100644 --- a/Include/pystate.h +++ b/Include/pystate.h @@ -53,12 +53,16 @@ typedef int (*Py_tracefunc)(PyObject *, struct _frame *, int, PyObject *); #define PyTrace_C_RETURN 6 typedef struct _ts { + /* See Python/ceval.c for comments explaining most fields */ struct _ts *next; PyInterpreterState *interp; struct _frame *frame; int recursion_depth; + /* 'tracing' keeps track of the execution depth when tracing/profiling. + This is to prevent the actual trace/profile code from being recorded in + the trace/profile. */ int tracing; int use_tracing; @@ -75,7 +79,7 @@ typedef struct _ts { PyObject *exc_value; PyObject *exc_traceback; - PyObject *dict; + PyObject *dict; /* Stores per-thread state */ /* tick_counter is incremented whenever the check_interval ticker * reaches zero. The purpose is to give a useful measure of the number diff --git a/Python/ceval.c b/Python/ceval.c index 459fd0d..972061d 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -3284,10 +3284,12 @@ PyEval_SetProfile(Py_tracefunc func, PyObject *arg) Py_XINCREF(arg); tstate->c_profilefunc = NULL; tstate->c_profileobj = NULL; + /* Must make sure that tracing is not ignored if 'temp' is freed */ tstate->use_tracing = tstate->c_tracefunc != NULL; Py_XDECREF(temp); tstate->c_profilefunc = func; tstate->c_profileobj = arg; + /* Flag that tracing or profiling is turned on */ tstate->use_tracing = (func != NULL) || (tstate->c_tracefunc != NULL); } @@ -3299,10 +3301,12 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg) Py_XINCREF(arg); tstate->c_tracefunc = NULL; tstate->c_traceobj = NULL; + /* Must make sure that profiling is not ignored if 'temp' is freed */ tstate->use_tracing = tstate->c_profilefunc != NULL; Py_XDECREF(temp); tstate->c_tracefunc = func; tstate->c_traceobj = arg; + /* Flag that tracing or profiling is turned on */ tstate->use_tracing = ((func != NULL) || (tstate->c_profilefunc != NULL)); } |