File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -2361,7 +2361,13 @@ do_tstate_ensure(void *arg)
23612361 ThreadData * data = (ThreadData * )arg ;
23622362 int res = PyThreadState_Ensure (data -> interp );
23632363 assert (res == 0 );
2364+ PyThreadState_Ensure (PyInterpreterState_Hold ());
2365+ PyThreadState_Ensure (PyInterpreterState_Hold ());
2366+ PyThreadState_Ensure (PyInterpreterState_Hold ());
23642367 res = PyRun_SimpleString (THREAD_CODE );
2368+ PyThreadState_Release ();
2369+ PyThreadState_Release ();
2370+ PyThreadState_Release ();
23652371 assert (res == 0 );
23662372 PyThreadState_Release ();
23672373 data -> done = 1 ;
Original file line number Diff line number Diff line change @@ -1812,7 +1812,7 @@ decrement_daemon_count(PyInterpreterState *interp)
18121812{
18131813 assert (interp != NULL );
18141814 struct _Py_finalizing_threads * finalizing = & interp -> threads .finalizing ;
1815- if (_Py_atomic_load_ssize_relaxed (& finalizing -> countdown ) == 1 ) {
1815+ if (_Py_atomic_add_ssize (& finalizing -> countdown , -1 ) == 1 ) {
18161816 _PyEvent_Notify (& finalizing -> finished );
18171817 }
18181818}
@@ -3324,11 +3324,15 @@ PyThreadState_Release(void)
33243324 return ;
33253325 }
33263326
3327+ PyInterpreterState * interp = tstate -> interp ;
33273328 tstate -> ensured = ensured -> next ;
33283329 tstate -> daemon = ensured -> was_daemon ;
33293330 PyMem_RawFree (ensured );
3330- PyThreadState_Clear (tstate );
3331- PyThreadState_Swap (NULL );
3332- PyInterpreterState * interp = tstate -> interp ;
3333- PyThreadState_Delete (tstate );
3331+ if (tstate -> ensured == NULL ) {
3332+ PyThreadState_Clear (tstate );
3333+ PyThreadState_Swap (NULL );
3334+ PyThreadState_Delete (tstate );
3335+ } else {
3336+ decrement_daemon_count (tstate -> interp );
3337+ }
33343338}
You can’t perform that action at this time.
0 commit comments