/* The thread currently executing in the __main__ module, if any. */
PyThreadState *main;
/* Used in Modules/_threadmodule.c. */
- long count;
+ Py_ssize_t count;
/* Support for runtime thread stack size tuning.
A value of 0 means using the platform's default stack size
or the size specified by the THREAD_STACK_SIZE macro. */
_PyThreadState_Bind(tstate);
PyEval_AcquireThread(tstate);
- tstate->interp->threads.count++;
+ _Py_atomic_add_ssize(&tstate->interp->threads.count, 1);
PyObject *res = PyObject_Call(boot->func, boot->args, boot->kwargs);
if (res == NULL) {
thread_bootstate_free(boot, 1);
- tstate->interp->threads.count--;
+ _Py_atomic_add_ssize(&tstate->interp->threads.count, -1);
PyThreadState_Clear(tstate);
_PyThreadState_DeleteCurrent(tstate);
thread__count(PyObject *self, PyObject *Py_UNUSED(ignored))
{
PyInterpreterState *interp = _PyInterpreterState_GET();
- return PyLong_FromLong(interp->threads.count);
+ return PyLong_FromSsize_t(_Py_atomic_load_ssize(&interp->threads.count));
}
PyDoc_STRVAR(_count_doc,