Mercurial > cpython-lru_cache-weakref
diff Modules/_threadmodule.c @ 59317:d7a62c16505b 3.1
Merged revisions 78639 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
................
r78639 | victor.stinner | 2010-03-04 00:28:07 +0100 (jeu., 04 mars 2010) | 10 lines
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.
........
................
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Wed, 03 Mar 2010 23:32:07 +0000 |
| parents | 1e4c4b235a89 |
| children | f197407bdba2 |
line wrap: on
line diff
--- a/Modules/_threadmodule.c Wed Mar 03 21:57:58 2010 +0000 +++ b/Modules/_threadmodule.c Wed Mar 03 23:32:07 2010 +0000 @@ -423,6 +423,7 @@ PyObject *func; PyObject *args; PyObject *keyw; + PyThreadState *tstate; }; static void @@ -432,8 +433,9 @@ PyThreadState *tstate; PyObject *res; - tstate = PyThreadState_New(boot->interp); - + tstate = boot->tstate; + tstate->thread_id = PyThread_get_thread_ident(); + _PyThreadState_Init(tstate); PyEval_AcquireThread(tstate); res = PyEval_CallObjectWithKeywords( boot->func, boot->args, boot->keyw); @@ -496,6 +498,11 @@ boot->func = func; boot->args = args; boot->keyw = keyw; + boot->tstate = _PyThreadState_Prealloc(boot->interp); + if (boot->tstate == NULL) { + PyMem_DEL(boot); + return PyErr_NoMemory(); + } Py_INCREF(func); Py_INCREF(args); Py_XINCREF(keyw); @@ -506,6 +513,7 @@ Py_DECREF(func); Py_DECREF(args); Py_XDECREF(keyw); + PyThreadState_Clear(boot->tstate); PyMem_DEL(boot); return NULL; }
