From 31ce987c2b2953d3167a2aad146fd0690f63e07c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 3 May 2018 19:05:59 +0200 Subject: [PATCH] rlimit-util: add a common destructor call for arrays of struct rlimit --- src/basic/rlimit-util.c | 10 ++++++++++ src/basic/rlimit-util.h | 2 ++ src/core/execute.c | 3 +-- src/core/manager.c | 5 ++--- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c index 154b34b8c1..7bae9f0ad0 100644 --- a/src/basic/rlimit-util.c +++ b/src/basic/rlimit-util.c @@ -324,3 +324,13 @@ int rlimit_from_string_harder(const char *s) { return rlimit_from_string(s); } + +void rlimit_free_all(struct rlimit **rl) { + int i; + + if (!rl) + return; + + for (i = 0; i < _RLIMIT_MAX; i++) + rl[i] = mfree(rl[i]); +} diff --git a/src/basic/rlimit-util.h b/src/basic/rlimit-util.h index 42f2e0e547..067e040c61 100644 --- a/src/basic/rlimit-util.h +++ b/src/basic/rlimit-util.h @@ -22,4 +22,6 @@ int rlimit_parse(int resource, const char *val, struct rlimit *ret); int rlimit_format(const struct rlimit *rl, char **ret); +void rlimit_free_all(struct rlimit **rl); + #define RLIMIT_MAKE_CONST(lim) ((struct rlimit) { lim, lim }) diff --git a/src/core/execute.c b/src/core/execute.c index d60e8f6a1a..3349bbaccb 100644 --- a/src/core/execute.c +++ b/src/core/execute.c @@ -3574,8 +3574,7 @@ void exec_context_done(ExecContext *c) { c->pass_environment = strv_free(c->pass_environment); c->unset_environment = strv_free(c->unset_environment); - for (l = 0; l < ELEMENTSOF(c->rlimit); l++) - c->rlimit[l] = mfree(c->rlimit[l]); + rlimit_free_all(c->rlimit); for (l = 0; l < 3; l++) { c->stdio_fdname[l] = mfree(c->stdio_fdname[l]); diff --git a/src/core/manager.c b/src/core/manager.c index a4cea85136..4a2f68b567 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -64,6 +64,7 @@ #include "path-util.h" #include "process-util.h" #include "ratelimit.h" +#include "rlimit-util.h" #include "rm-rf.h" #include "signal-util.h" #include "socket-util.h" @@ -1174,7 +1175,6 @@ static void manager_clear_jobs_and_units(Manager *m) { Manager* manager_free(Manager *m) { UnitType c; - int i; ExecDirectoryType dt; if (!m) @@ -1242,8 +1242,7 @@ Manager* manager_free(Manager *m) { free(m->switch_root); free(m->switch_root_init); - for (i = 0; i < _RLIMIT_MAX; i++) - m->rlimit[i] = mfree(m->rlimit[i]); + rlimit_free_all(m->rlimit); assert(hashmap_isempty(m->units_requiring_mounts_for)); hashmap_free(m->units_requiring_mounts_for);