Skip to content

Commit c5ec89c

Browse files
committed
Fix the countdown decrement.
1 parent d501f35 commit c5ec89c

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

Programs/_testembed.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff 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;

Python/pystate.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff 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
}

0 commit comments

Comments
 (0)