Kaydet (Commit) eb619bb8 authored tarafından Mark Hammond's avatar Mark Hammond

Fix for [ 1010677 ] thread Module Breaks PyGILState_Ensure(),

and a test case.
When booting a new thread, use the PyGILState API to manage the GIL.
üst 8107ca47
......@@ -43,3 +43,7 @@ except AttributeError:
if have_thread_state:
TestThreadState()
import threading
t=threading.Thread(target=TestThreadState)
t.start()
......@@ -425,11 +425,10 @@ static void
t_bootstrap(void *boot_raw)
{
struct bootstate *boot = (struct bootstate *) boot_raw;
PyThreadState *tstate;
PyGILState_STATE gstate;
PyObject *res;
tstate = PyThreadState_New(boot->interp);
PyEval_AcquireThread(tstate);
gstate = PyGILState_Ensure();
res = PyEval_CallObjectWithKeywords(
boot->func, boot->args, boot->keyw);
if (res == NULL) {
......@@ -454,8 +453,7 @@ t_bootstrap(void *boot_raw)
Py_DECREF(boot->args);
Py_XDECREF(boot->keyw);
PyMem_DEL(boot_raw);
PyThreadState_Clear(tstate);
PyThreadState_DeleteCurrent();
PyGILState_Release(gstate);
PyThread_exit_thread();
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment