PatternObject *pattern, PyObject *template)
{
/* delegate to Python code */
- PyObject *func = module_state->compile_template;
+ PyObject *func = FT_ATOMIC_LOAD_PTR(module_state->compile_template);
if (func == NULL) {
func = _PyImport_GetModuleAttrString("re", "_compile_template");
if (func == NULL) {
return NULL;
}
+#ifdef Py_GIL_DISABLED
+ PyObject *other_func = NULL;
+ if (!_Py_atomic_compare_exchange_ptr(&module_state->compile_template, &other_func, func)) {
+ Py_DECREF(func);
+ func = other_func;
+ }
+#else
Py_XSETREF(module_state->compile_template, func);
+#endif
}
PyObject *args[] = {(PyObject *)pattern, template};