diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c index fad1fb0d45..085fc6487f 100644 --- a/src/oom/oomd-manager.c +++ b/src/oom/oomd-manager.c @@ -112,7 +112,7 @@ static int process_managed_oom_reply( continue; } - ret = oomd_insert_cgroup_context(NULL, monitor_hm, empty_to_root(reply.path)); + ret = oomd_insert_cgroup_context(NULL, monitor_hm, reply.path); if (ret == -ENOMEM) { r = ret; goto finish; diff --git a/src/oom/oomd-util.c b/src/oom/oomd-util.c index b054ccacc4..d8dbb75013 100644 --- a/src/oom/oomd-util.c +++ b/src/oom/oomd-util.c @@ -384,16 +384,20 @@ int oomd_system_context_acquire(const char *proc_swaps_path, OomdSystemContext * int oomd_insert_cgroup_context(Hashmap *old_h, Hashmap *new_h, const char *path) { _cleanup_(oomd_cgroup_context_freep) OomdCGroupContext *curr_ctx = NULL; - OomdCGroupContext *old_ctx, *ctx; + OomdCGroupContext *old_ctx; int r; assert(new_h); assert(path); + path = empty_to_root(path); + r = oomd_cgroup_context_acquire(path, &curr_ctx); if (r < 0) return log_debug_errno(r, "Failed to get OomdCGroupContext for %s: %m", path); + assert_se(streq(path, curr_ctx->path)); + old_ctx = hashmap_get(old_h, path); if (old_ctx) { curr_ctx->last_pgscan = old_ctx->pgscan; @@ -401,11 +405,11 @@ int oomd_insert_cgroup_context(Hashmap *old_h, Hashmap *new_h, const char *path) curr_ctx->last_hit_mem_pressure_limit = old_ctx->last_hit_mem_pressure_limit; } - ctx = TAKE_PTR(curr_ctx); - r = hashmap_put(new_h, ctx->path, ctx); + r = hashmap_put(new_h, curr_ctx->path, curr_ctx); if (r < 0) return r; + TAKE_PTR(curr_ctx); return 0; } diff --git a/src/oom/test-oomd-util.c b/src/oom/test-oomd-util.c index a0e583ac6b..0b1a3adfcc 100644 --- a/src/oom/test-oomd-util.c +++ b/src/oom/test-oomd-util.c @@ -150,6 +150,7 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) { assert_se(oomd_insert_cgroup_context(NULL, h1, cgroup) == 0); c1 = hashmap_get(h1, cgroup); assert_se(c1); + assert_se(oomd_insert_cgroup_context(NULL, h1, cgroup) == -EEXIST); /* make sure certain values from h1 get updated in h2 */ c1->pgscan = 5555;