locale-util: do not call setlocale() when multi-threaded

Fixes #30141.
This commit is contained in:
Yu Watanabe
2023-11-23 00:50:42 +09:00
parent 3197d778e0
commit ca13432d60
+7
View File
@@ -17,6 +17,7 @@
#include "fileio.h"
#include "hashmap.h"
#include "locale-util.h"
#include "missing_syscall.h"
#include "path-util.h"
#include "set.h"
#include "string-table.h"
@@ -303,6 +304,12 @@ bool is_locale_utf8(void) {
} else if (r != -ENXIO)
log_debug_errno(r, "Failed to parse $SYSTEMD_UTF8, ignoring: %m");
/* This function may be called from libsystemd, and setlocale() is not thread safe. Assuming yes. */
if (gettid() != raw_getpid()) {
cached_answer = true;
goto out;
}
if (!setlocale(LC_ALL, "")) {
cached_answer = true;
goto out;