summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_capi.py4
-rw-r--r--Modules/threadmodule.c8
2 files changed, 7 insertions, 5 deletions
diff --git a/Lib/test/test_capi.py b/Lib/test/test_capi.py
index 82bded4..bda706a 100644
--- a/Lib/test/test_capi.py
+++ b/Lib/test/test_capi.py
@@ -43,3 +43,7 @@ except AttributeError:
if have_thread_state:
TestThreadState()
+ import threading
+ t=threading.Thread(target=TestThreadState)
+ t.start()
+
diff --git a/Modules/threadmodule.c b/Modules/threadmodule.c
index b398a25..cba01fa 100644
--- a/Modules/threadmodule.c
+++ b/Modules/threadmodule.c
@@ -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();
}