Mercurial > cpython-lru_cache-weakref
diff Python/pystate.c @ 59315:7f500641c06a legacy-trunk
Issue #7544: Preallocate thread memory before creating the thread to avoid a
fatal error in low memory condition.
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Wed, 03 Mar 2010 23:20:25 +0000 |
| parents | a8a8232cb541 |
| children | fd25030223b0 |
line wrap: on
line diff
--- a/Python/pystate.c Wed Mar 03 21:53:41 2010 +0000 +++ b/Python/pystate.c Wed Mar 03 23:20:25 2010 +0000 @@ -154,8 +154,8 @@ return self->frame; } -PyThreadState * -PyThreadState_New(PyInterpreterState *interp) +static PyThreadState * +new_threadstate(PyInterpreterState *interp, int init) { PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); @@ -193,9 +193,8 @@ tstate->c_profileobj = NULL; tstate->c_traceobj = NULL; -#ifdef WITH_THREAD - _PyGILState_NoteThreadState(tstate); -#endif + if (init) + _PyThreadState_Init(tstate); HEAD_LOCK(); tstate->next = interp->tstate_head; @@ -206,6 +205,25 @@ return tstate; } +PyThreadState * +PyThreadState_New(PyInterpreterState *interp) +{ + return new_threadstate(interp, 1); +} + +PyThreadState * +_PyThreadState_Prealloc(PyInterpreterState *interp) +{ + return new_threadstate(interp, 0); +} + +void +_PyThreadState_Init(PyThreadState *tstate) +{ +#ifdef WITH_THREAD + _PyGILState_NoteThreadState(tstate); +#endif +} void PyThreadState_Clear(PyThreadState *tstate)
