diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-04-04 16:43:44 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-04-04 18:32:12 +0900 |
commit | 9dfbae203e3afa500163bc46e0070c4cb2180aac (patch) | |
tree | 72d9f1303b7ae87693c82baf90c6d6f649053c29 /src/libsystemd/sd-journal | |
parent | 01aa59979bc61125f599a5b8a6c911fff5daaee7 (diff) | |
download | systemd-9dfbae203e3afa500163bc46e0070c4cb2180aac.tar.gz |
sd-journal: cache results of parsing environment variables
Diffstat (limited to 'src/libsystemd/sd-journal')
-rw-r--r-- | src/libsystemd/sd-journal/journal-file.c | 35 |
1 files changed, 23 insertions, 12 deletions
diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c index 8da4ca9cad..675ecea7b6 100644 --- a/src/libsystemd/sd-journal/journal-file.c +++ b/src/libsystemd/sd-journal/journal-file.c @@ -27,6 +27,7 @@ #include "journal-internal.h" #include "lookup3.h" #include "memory-util.h" +#include "missing_threads.h" #include "path-util.h" #include "prioq.h" #include "random-util.h" @@ -313,27 +314,37 @@ JournalFile* journal_file_close(JournalFile *f) { } static bool keyed_hash_requested(void) { + static thread_local int cached = -1; int r; - r = getenv_bool("SYSTEMD_JOURNAL_KEYED_HASH"); - if (r >= 0) - return r; - if (r != -ENXIO) - log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_KEYED_HASH environment variable, ignoring: %m"); + if (cached < 0) { + r = getenv_bool("SYSTEMD_JOURNAL_KEYED_HASH"); + if (r < 0) { + if (r != -ENXIO) + log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_KEYED_HASH environment variable, ignoring: %m"); + cached = true; + } else + cached = r; + } - return true; + return cached; } static bool compact_mode_requested(void) { + static thread_local int cached = -1; int r; - r = getenv_bool("SYSTEMD_JOURNAL_COMPACT"); - if (r >= 0) - return r; - if (r != -ENXIO) - log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_COMPACT environment variable, ignoring: %m"); + if (cached < 0) { + r = getenv_bool("SYSTEMD_JOURNAL_COMPACT"); + if (r < 0) { + if (r != -ENXIO) + log_debug_errno(r, "Failed to parse $SYSTEMD_JOURNAL_COMPACT environment variable, ignoring: %m"); + cached = true; + } else + cached = r; + } - return true; + return cached; } static int journal_file_init_header( |