summaryrefslogtreecommitdiffstats
path: root/Modules/clinic
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-04-02 14:44:26 (GMT)
committerGitHub <noreply@github.com>2024-04-02 14:44:26 (GMT)
commit954d616b4c8cd091214aa3b8ea886bcf9067243a (patch)
tree13e67dbaa98b7288e9d50befd0ac24b9fcba610f /Modules/clinic
parente569f9132b5bdc1c103116a020e19e3ccc20cf34 (diff)
downloadcpython-954d616b4c8cd091214aa3b8ea886bcf9067243a.zip
cpython-954d616b4c8cd091214aa3b8ea886bcf9067243a.tar.gz
cpython-954d616b4c8cd091214aa3b8ea886bcf9067243a.tar.bz2
gh-117440: Make `syslog` thread-safe in free-threaded builds (#117441)
Use critical sections to protect access to the syslog module.
Diffstat (limited to 'Modules/clinic')
-rw-r--r--Modules/clinic/syslogmodule.c.h15
1 files changed, 13 insertions, 2 deletions
diff --git a/Modules/clinic/syslogmodule.c.h b/Modules/clinic/syslogmodule.c.h
index 58b0ea5..77cf24e 100644
--- a/Modules/clinic/syslogmodule.c.h
+++ b/Modules/clinic/syslogmodule.c.h
@@ -6,6 +6,7 @@ preserve
# include "pycore_gc.h" // PyGC_Head
# include "pycore_runtime.h" // _Py_ID()
#endif
+#include "pycore_critical_section.h"// Py_BEGIN_CRITICAL_SECTION()
#include "pycore_modsupport.h" // _PyArg_UnpackKeywords()
PyDoc_STRVAR(syslog_openlog__doc__,
@@ -88,7 +89,9 @@ syslog_openlog(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObje
goto exit;
}
skip_optional_pos:
+ Py_BEGIN_CRITICAL_SECTION(module);
return_value = syslog_openlog_impl(module, ident, logopt, facility);
+ Py_END_CRITICAL_SECTION();
exit:
return return_value;
@@ -129,7 +132,9 @@ syslog_syslog(PyObject *module, PyObject *args)
PyErr_SetString(PyExc_TypeError, "syslog.syslog requires 1 to 2 arguments");
goto exit;
}
+ Py_BEGIN_CRITICAL_SECTION(module);
return_value = syslog_syslog_impl(module, group_left_1, priority, message);
+ Py_END_CRITICAL_SECTION();
exit:
return return_value;
@@ -150,7 +155,13 @@ syslog_closelog_impl(PyObject *module);
static PyObject *
syslog_closelog(PyObject *module, PyObject *Py_UNUSED(ignored))
{
- return syslog_closelog_impl(module);
+ PyObject *return_value = NULL;
+
+ Py_BEGIN_CRITICAL_SECTION(module);
+ return_value = syslog_closelog_impl(module);
+ Py_END_CRITICAL_SECTION();
+
+ return return_value;
}
PyDoc_STRVAR(syslog_setlogmask__doc__,
@@ -251,4 +262,4 @@ syslog_LOG_UPTO(PyObject *module, PyObject *arg)
exit:
return return_value;
}
-/*[clinic end generated code: output=86ca2fd84b2da98e input=a9049054013a1b77]*/
+/*[clinic end generated code: output=8d25899bd31969d3 input=a9049054013a1b77]*/