gh-109795: `_thread.start_new_thread`: allocate thread bootstate using raw memory allocator (#109808)
(cherry picked from commit
1b8f2366b38c87b0450d9c15bdfdd4c4a2fc3a01)
Co-authored-by: Radislav Chugunov <52372310+chgnrdv@users.noreply.github.com>
Py_DECREF(boot->args);
Py_XDECREF(boot->kwargs);
}
- PyMem_Free(boot);
+ PyMem_RawFree(boot);
}
return NULL;
}
- struct bootstate *boot = PyMem_NEW(struct bootstate, 1);
+ // gh-109795: Use PyMem_RawMalloc() instead of PyMem_Malloc(),
+ // because it should be possible to call thread_bootstate_free()
+ // without holding the GIL.
+ struct bootstate *boot = PyMem_RawMalloc(sizeof(struct bootstate));
if (boot == NULL) {
return PyErr_NoMemory();
}
boot->tstate = _PyThreadState_Prealloc(interp);
if (boot->tstate == NULL) {
- PyMem_Free(boot);
+ PyMem_RawFree(boot);
return PyErr_NoMemory();
}
boot->func = Py_NewRef(func);