mirror of
https://github.com/python/cpython.git
synced 2025-07-24 11:44:31 +00:00
PyEval_SaveThread() and PyEval_RestoreThread() now return/take a
PyThreadState pointer instead of a (frame) PyObject pointer. This makes much more sense. It is backward incompatible, but that's no problem, because (a) the heaviest users are the Py_{BEGIN,END}_ ALLOW_THREADS macros here, which have been fixed too; (b) there are very few direct users; (c) those who use it are there will probably appreciate the change. Also, added new functions PyEval_AcquireThread() and PyEval_ReleaseThread() which allows the threads created by the thread module as well threads created by others (!) to set/reset the current thread, and at the same time acquire/release the interpreter lock. Much saner.
This commit is contained in:
parent
c864ad695f
commit
2fca21f762
2 changed files with 34 additions and 9 deletions
|
@ -100,13 +100,16 @@ int Py_MakePendingCalls Py_PROTO((void));
|
|||
*/
|
||||
|
||||
extern void PyEval_InitThreads Py_PROTO((void));
|
||||
extern PyObject *PyEval_SaveThread Py_PROTO((void));
|
||||
extern void PyEval_RestoreThread Py_PROTO((PyObject *));
|
||||
extern PyThreadState *PyEval_SaveThread Py_PROTO((void));
|
||||
extern void PyEval_RestoreThread Py_PROTO((PyThreadState *));
|
||||
|
||||
#ifdef WITH_THREAD
|
||||
|
||||
extern void PyEval_AcquireThread Py_PROTO((PyThreadState *tstate));
|
||||
extern void PyEval_ReleaseThread Py_PROTO((PyThreadState *tstate));
|
||||
|
||||
#define Py_BEGIN_ALLOW_THREADS { \
|
||||
PyObject *_save; \
|
||||
PyThreadState *_save; \
|
||||
_save = PyEval_SaveThread();
|
||||
#define Py_BLOCK_THREADS PyEval_RestoreThread(_save);
|
||||
#define Py_UNBLOCK_THREADS _save = PyEval_SaveThread();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue