From: Victor Stinner Date: Thu, 13 Oct 2022 11:34:55 +0000 (+0200) Subject: gh-98178: syslog() is not thread-safe on macOS (#98213) X-Git-Tag: v3.12.0a1~113 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d4b91663857e85eab1f309cacec4d27b5f6657ec;p=thirdparty%2FPython%2Fcpython.git gh-98178: syslog() is not thread-safe on macOS (#98213) On macOS, fix a crash in syslog.syslog() in multi-threaded applications. On macOS, the libc syslog() function is not thread-safe, so syslog.syslog() no longer releases the GIL to call it. --- diff --git a/Misc/NEWS.d/next/Library/2022-10-12-10-00-40.gh-issue-98178.hspH51.rst b/Misc/NEWS.d/next/Library/2022-10-12-10-00-40.gh-issue-98178.hspH51.rst new file mode 100644 index 000000000000..833a6e6bb3f7 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2022-10-12-10-00-40.gh-issue-98178.hspH51.rst @@ -0,0 +1,4 @@ +On macOS, fix a crash in :func:`syslog.syslog` in multi-threaded applications. +On macOS, the libc ``syslog()`` function is not thread-safe, so +:func:`syslog.syslog` no longer releases the GIL to call it. Patch by Victor +Stinner. diff --git a/Modules/syslogmodule.c b/Modules/syslogmodule.c index b6296ed0a69a..5137d01c6887 100644 --- a/Modules/syslogmodule.c +++ b/Modules/syslogmodule.c @@ -207,9 +207,14 @@ syslog_syslog_impl(PyObject *module, int group_left_1, int priority, */ PyObject *ident = S_ident_o; Py_XINCREF(ident); +#ifdef __APPLE__ + // gh-98178: On macOS, libc syslog() is not thread-safe + syslog(priority, "%s", message); +#else Py_BEGIN_ALLOW_THREADS; syslog(priority, "%s", message); Py_END_ALLOW_THREADS; +#endif Py_XDECREF(ident); Py_RETURN_NONE; }