diff options
author | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-21 13:32:31 +0000 |
---|---|---|
committer | Victor Stinner <victor.stinner@haypocalc.com> | 2010-03-21 13:32:31 +0000 |
commit | d156fa303348b5bcc644f96d390382d7fb573a7b (patch) | |
tree | 2cb8730ebe47e813ac6280718dd601761cefe927 /Python/pystate.c | |
parent | 27bf15ef8d6080985d313aa61d05ac92ff61e0dd (diff) | |
download | cpython-git-d156fa303348b5bcc644f96d390382d7fb573a7b.tar.gz |
Merged revisions 78638 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r78638 | victor.stinner | 2010-03-04 00:20:25 +0100 (jeu., 04 mars 2010) | 3 lines
Issue #7544: Preallocate thread memory before creating the thread to avoid a
fatal error in low memory condition.
........
Diffstat (limited to 'Python/pystate.c')
-rw-r--r-- | Python/pystate.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index da417c1032..343a97b00d 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -154,8 +154,8 @@ threadstate_getframe(PyThreadState *self) 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 @@ PyThreadState_New(PyInterpreterState *interp) 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 @@ PyThreadState_New(PyInterpreterState *interp) 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) |