Browse Source
bpo-36710: Pass explicitly tstate in sysmodule.c (GH-14060)
* Replace global var Py_VerboseFlag with interp->config.verbose.
* Add _PyErr_NoMemory(tstate) function.
* Add tstate parameter to _PyEval_SetCoroutineOriginTrackingDepth()
and move the function to the internal API.
* Replace _PySys_InitMain(runtime, interp)
with _PySys_InitMain(runtime, tstate).
pull/14065/head
Victor Stinner
7 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with
262 additions and
178 deletions
Include/ceval.h
Include/internal/pycore_ceval.h
Include/internal/pycore_pyerrors.h
Include/internal/pycore_pylifecycle.h
Python/ceval.c
Python/errors.c
Python/pylifecycle.c
Python/sysmodule.c
@ -31,7 +31,6 @@ PyAPI_FUNC(PyObject *) PyEval_CallMethod(PyObject *obj,
# ifndef Py_LIMITED_API
PyAPI_FUNC ( void ) PyEval_SetProfile ( Py_tracefunc , PyObject * ) ;
PyAPI_FUNC ( void ) PyEval_SetTrace ( Py_tracefunc , PyObject * ) ;
PyAPI_FUNC ( void ) _PyEval_SetCoroutineOriginTrackingDepth ( int new_depth ) ;
PyAPI_FUNC ( int ) _PyEval_GetCoroutineOriginTrackingDepth ( void ) ;
PyAPI_FUNC ( void ) _PyEval_SetAsyncGenFirstiter ( PyObject * ) ;
PyAPI_FUNC ( PyObject * ) _PyEval_GetAsyncGenFirstiter ( void ) ;
@ -27,6 +27,9 @@ PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
struct _ceval_runtime_state * ceval ) ;
PyAPI_FUNC ( void ) _PyEval_ReInitThreads (
_PyRuntimeState * runtime ) ;
PyAPI_FUNC ( void ) _PyEval_SetCoroutineOriginTrackingDepth (
PyThreadState * tstate ,
int new_depth ) ;
/* Private function */
void _PyEval_Fini ( void ) ;
@ -39,6 +39,8 @@ PyAPI_FUNC(void) _PyErr_Clear(PyThreadState *tstate);
PyAPI_FUNC ( void ) _PyErr_SetNone ( PyThreadState * tstate , PyObject * exception ) ;
PyAPI_FUNC ( PyObject * ) _PyErr_NoMemory ( PyThreadState * tstate ) ;
PyAPI_FUNC ( void ) _PyErr_SetString (
PyThreadState * tstate ,
PyObject * exception ,
@ -45,7 +45,7 @@ extern PyStatus _PySys_Create(
extern PyStatus _PySys_SetPreliminaryStderr ( PyObject * sysdict ) ;
extern int _PySys_InitMain (
_PyRuntimeState * runtime ,
PyInterpreterState * interp ) ;
PyThreadState * tstate ) ;
extern PyStatus _PyImport_Init ( PyInterpreterState * interp ) ;
extern PyStatus _PyExc_Init ( void ) ;
extern PyStatus _PyErr_Init ( void ) ;
@ -4728,10 +4728,9 @@ PyEval_SetTrace(Py_tracefunc func, PyObject *arg)
}
void
_PyEval_SetCoroutineOriginTrackingDepth ( int new_depth )
_PyEval_SetCoroutineOriginTrackingDepth ( PyThreadState * tstate , int new_depth )
{
assert ( new_depth > = 0 ) ;
PyThreadState * tstate = _PyThreadState_GET ( ) ;
tstate - > coroutine_origin_tracking_depth = new_depth ;
}
@ -547,9 +547,8 @@ PyErr_BadArgument(void)
}
PyObject *
PyErr_NoMemory ( void )
_ PyErr_NoMemory( PyThreadState * tstate )
{
PyThreadState * tstate = _PyThreadState_GET ( ) ;
if ( Py_TYPE ( PyExc_MemoryError ) = = NULL ) {
/* PyErr_NoMemory() has been called before PyExc_MemoryError has been
initialized by _PyExc_Init ( ) */
@ -560,6 +559,13 @@ PyErr_NoMemory(void)
return NULL ;
}
PyObject *
PyErr_NoMemory ( void )
{
PyThreadState * tstate = _PyThreadState_GET ( ) ;
return _PyErr_NoMemory ( tstate ) ;
}
PyObject *
PyErr_SetFromErrnoWithFilenameObject ( PyObject * exc , PyObject * filenameObject )
{
@ -899,6 +899,7 @@ pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
}
/* Configure the main interpreter */
PyThreadState * tstate = _PyRuntimeState_GetThreadState ( runtime ) ;
PyConfig * config = & interp - > config ;
if ( runtime - > initialized ) {
@ -919,7 +920,7 @@ pyinit_main(_PyRuntimeState *runtime, PyInterpreterState *interp)
return _PyStatus_ERR ( " can't initialize time " ) ;
}
if ( _PySys_InitMain ( runtime , interp ) < 0 ) {
if ( _PySys_InitMain ( runtime , tstate ) < 0 ) {
return _PyStatus_ERR ( " can't finish initializing sys " ) ;
}
@ -1456,7 +1457,7 @@ new_interpreter(PyThreadState **tstate_p)
}
Py_INCREF ( interp - > sysdict ) ;
PyDict_SetItemString ( interp - > sysdict , " modules " , modules ) ;
if ( _PySys_InitMain ( runtime , interp ) < 0 ) {
if ( _PySys_InitMain ( runtime , tstate ) < 0 ) {
return _PyStatus_ERR ( " can't finish initializing sys " ) ;
}
}