Mercurial > cpython-lru_cache-weakref
diff Python/pystate.c @ 33713:517e4ec0df89 legacy-trunk
PyInterpreterState_New(), PyThreadState_New(): use malloc/free directly.
This appears to finish repairs for SF bug 1041645.
This is a critical bugfix.
| author | Tim Peters <tim.peters@gmail.com> |
|---|---|
| date | Sun, 10 Oct 2004 02:47:33 +0000 |
| parents | 664b18aa6fc1 |
| children | 635dd8a9ebd9 |
line wrap: on
line diff
--- a/Python/pystate.c Sun Oct 10 01:58:44 2004 +0000 +++ b/Python/pystate.c Sun Oct 10 02:47:33 2004 +0000 @@ -3,6 +3,16 @@ #include "Python.h" +/* -------------------------------------------------------------------------- +CAUTION + +Always use malloc() and free() directly in this file. A number of these +functions are advertised as safe to call when the GIL isn't held, and in +a debug build Python redirects (e.g.) PyMem_NEW (etc) to Python's debugging +obmalloc functions. Those aren't thread-safe (they rely on the GIL to avoid +the expense of doing their own locking). +-------------------------------------------------------------------------- */ + #ifdef HAVE_DLOPEN #ifdef HAVE_DLFCN_H #include <dlfcn.h> @@ -41,7 +51,8 @@ PyInterpreterState * PyInterpreterState_New(void) { - PyInterpreterState *interp = PyMem_NEW(PyInterpreterState, 1); + PyInterpreterState *interp = (PyInterpreterState *) + malloc(sizeof(PyInterpreterState)); if (interp != NULL) { HEAD_INIT(); @@ -119,7 +130,7 @@ Py_FatalError("PyInterpreterState_Delete: remaining threads"); *p = interp->next; HEAD_UNLOCK(); - PyMem_DEL(interp); + free(interp); } @@ -133,7 +144,8 @@ PyThreadState * PyThreadState_New(PyInterpreterState *interp) { - PyThreadState *tstate = PyMem_NEW(PyThreadState, 1); + PyThreadState *tstate = (PyThreadState *)malloc(sizeof(PyThreadState)); + if (_PyThreadState_GetFrame == NULL) _PyThreadState_GetFrame = threadstate_getframe; @@ -226,7 +238,7 @@ } *p = tstate->next; HEAD_UNLOCK(); - PyMem_DEL(tstate); + free(tstate); }
