From fc53809803cd2bc2434e312b19a18fa36776da12 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 12 Jun 2024 05:50:40 +0200 Subject: Adding upstream version 256. Signed-off-by: Daniel Baumann --- src/oom/oomctl.c | 4 +--- src/oom/oomd-manager-bus.c | 2 +- src/oom/oomd-manager.c | 25 ++++++------------------- src/oom/oomd-util.c | 30 ++++++++++++++---------------- src/oom/oomd.c | 11 +++++++---- 5 files changed, 29 insertions(+), 43 deletions(-) (limited to 'src/oom') diff --git a/src/oom/oomctl.c b/src/oom/oomctl.c index eb15f50..00914f3 100644 --- a/src/oom/oomctl.c +++ b/src/oom/oomctl.c @@ -119,9 +119,7 @@ static int run(int argc, char* argv[]) { int r; - log_show_color(true); - log_parse_environment(); - log_open(); + log_setup(); r = parse_argv(argc, argv); if (r <= 0) diff --git a/src/oom/oomd-manager-bus.c b/src/oom/oomd-manager-bus.c index 0581d58..7d2edb5 100644 --- a/src/oom/oomd-manager-bus.c +++ b/src/oom/oomd-manager-bus.c @@ -22,7 +22,7 @@ static int bus_method_dump_by_fd(sd_bus_message *message, void *userdata, sd_bus if (r < 0) return r; - fd = acquire_data_fd(dump, strlen(dump), 0); + fd = acquire_data_fd(dump); if (fd < 0) return fd; diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c index 6081254..839936c 100644 --- a/src/oom/oomd-manager.c +++ b/src/oom/oomd-manager.c @@ -30,30 +30,17 @@ static void managed_oom_message_destroy(ManagedOOMMessage *message) { free(message->property); } -static int managed_oom_mode(const char *name, JsonVariant *v, JsonDispatchFlags flags, void *userdata) { - ManagedOOMMode *mode = userdata, m; - const char *s; - - assert(mode); - assert_se(s = json_variant_string(v)); - - m = managed_oom_mode_from_string(s); - if (m < 0) - return json_log(v, flags, m, "%s is not a valid ManagedOOMMode", s); - - *mode = m; - return 0; -} +static JSON_DISPATCH_ENUM_DEFINE(dispatch_managed_oom_mode, ManagedOOMMode, managed_oom_mode_from_string); static int process_managed_oom_message(Manager *m, uid_t uid, JsonVariant *parameters) { JsonVariant *c, *cgroups; int r; static const JsonDispatch dispatch_table[] = { - { "mode", JSON_VARIANT_STRING, managed_oom_mode, offsetof(ManagedOOMMessage, mode), JSON_MANDATORY }, - { "path", JSON_VARIANT_STRING, json_dispatch_string, offsetof(ManagedOOMMessage, path), JSON_MANDATORY }, - { "property", JSON_VARIANT_STRING, json_dispatch_string, offsetof(ManagedOOMMessage, property), JSON_MANDATORY }, - { "limit", _JSON_VARIANT_TYPE_INVALID, json_dispatch_uint32, offsetof(ManagedOOMMessage, limit), 0 }, + { "mode", JSON_VARIANT_STRING, dispatch_managed_oom_mode, offsetof(ManagedOOMMessage, mode), JSON_MANDATORY }, + { "path", JSON_VARIANT_STRING, json_dispatch_string, offsetof(ManagedOOMMessage, path), JSON_MANDATORY }, + { "property", JSON_VARIANT_STRING, json_dispatch_string, offsetof(ManagedOOMMessage, property), JSON_MANDATORY }, + { "limit", _JSON_VARIANT_TYPE_INVALID, json_dispatch_uint32, offsetof(ManagedOOMMessage, limit), 0 }, {}, }; @@ -642,7 +629,7 @@ Manager* manager_free(Manager *m) { sd_event_source_unref(m->mem_pressure_context_event_source); sd_event_unref(m->event); - bus_verify_polkit_async_registry_free(m->polkit_registry); + hashmap_free(m->polkit_registry); sd_bus_flush_close_unref(m->bus); hashmap_free(m->monitored_swap_cgroup_contexts); diff --git a/src/oom/oomd-util.c b/src/oom/oomd-util.c index f9f0af2..69d103e 100644 --- a/src/oom/oomd-util.c +++ b/src/oom/oomd-util.c @@ -276,7 +276,7 @@ int oomd_cgroup_kill(const char *path, bool recurse, bool dry_run) { if (r < 0) log_debug_errno(r, "Failed to set user.oomd_kill on kill: %m"); - return set_size(pids_killed) != 0; + return !set_isempty(pids_killed); } typedef void (*dump_candidate_func)(const OomdCGroupContext *ctx, FILE *f, const char *prefix); @@ -321,17 +321,16 @@ int oomd_kill_by_pgscan_rate(Hashmap *h, const char *prefix, bool dry_run, char if (r == -ENOMEM) return r; /* Treat oom as a hard error */ if (r < 0) { - if (ret == 0) - ret = r; + RET_GATHER(ret, r); continue; /* Try to find something else to kill */ } dump_until = MAX(dump_until, i + 1); - char *selected = strdup(sorted[i]->path); - if (!selected) - return -ENOMEM; - *ret_selected = selected; + ret = r; + r = strdup_to(ret_selected, sorted[i]->path); + if (r < 0) + return r; break; } @@ -365,17 +364,16 @@ int oomd_kill_by_swap_usage(Hashmap *h, uint64_t threshold_usage, bool dry_run, if (r == -ENOMEM) return r; /* Treat oom as a hard error */ if (r < 0) { - if (ret == 0) - ret = r; + RET_GATHER(ret, r); continue; /* Try to find something else to kill */ } dump_until = MAX(dump_until, i + 1); - char *selected = strdup(sorted[i]->path); - if (!selected) - return -ENOMEM; - *ret_selected = selected; + ret = r; + r = strdup_to(ret_selected, sorted[i]->path); + if (r < 0) + return r; break; } @@ -442,9 +440,9 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) { return log_debug_errno(r, "Error converting pgscan value to uint64_t: %m"); } - ctx->path = strdup(empty_to_root(path)); - if (!ctx->path) - return -ENOMEM; + r = strdup_to(&ctx->path, empty_to_root(path)); + if (r < 0) + return r; *ret = TAKE_PTR(ctx); return 0; diff --git a/src/oom/oomd.c b/src/oom/oomd.c index ecc2eda..0d80310 100644 --- a/src/oom/oomd.c +++ b/src/oom/oomd.c @@ -31,9 +31,12 @@ static int parse_config(void) { {} }; - return config_parse_config_file("oomd.conf", "OOM\0", - config_item_table_lookup, items, - CONFIG_PARSE_WARN, NULL); + return config_parse_standard_file_with_dropins( + "systemd/oomd.conf", + "OOM\0", + config_item_table_lookup, items, + CONFIG_PARSE_WARN, + /* userdata= */ NULL); } static int help(void) { @@ -164,7 +167,7 @@ static int run(int argc, char *argv[]) { if (!FLAGS_SET(mask, CGROUP_MASK_MEMORY)) return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Requires the cgroup memory controller."); - assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT, -1) >= 0); + assert_se(sigprocmask_many(SIG_BLOCK, NULL, SIGTERM, SIGINT) >= 0); if (arg_mem_pressure_usec > 0 && arg_mem_pressure_usec < 1 * USEC_PER_SEC) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "DefaultMemoryPressureDurationSec= must be 0 or at least 1s"); -- cgit v1.2.3