Mercurial > cpython-lru_cache-weakref
diff Modules/_threadmodule.c @ 59316:dd8527399582
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:28:07 +0000 |
| parents | 086846381e8f |
| children | 01d1fd775d16 |
line wrap: on
line diff
--- a/Modules/_threadmodule.c Wed Mar 03 21:56:53 2010 +0000 +++ b/Modules/_threadmodule.c Wed Mar 03 23:28:07 2010 +0000 @@ -695,6 +695,7 @@ PyObject *func; PyObject *args; PyObject *keyw; + PyThreadState *tstate; }; static void @@ -704,8 +705,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); nb_threads++; res = PyEval_CallObjectWithKeywords( @@ -770,6 +772,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); @@ -780,6 +787,7 @@ Py_DECREF(func); Py_DECREF(args); Py_XDECREF(keyw); + PyThreadState_Clear(boot->tstate); PyMem_DEL(boot); return NULL; }
