From: Lennart Poettering Date: Thu, 3 May 2018 17:05:59 +0000 (+0200) Subject: rlimit-util: add a common destructor call for arrays of struct rlimit X-Git-Tag: v239~243^2~18 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=31ce987c2b2953d3167a2aad146fd0690f63e07c;p=thirdparty%2Fsystemd.git rlimit-util: add a common destructor call for arrays of struct rlimit --- diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c index 154b34b8c1b..7bae9f0ad0c 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 42f2e0e5471..067e040c61b 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 d60e8f6a1ac..3349bbaccbf 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 a4cea85136f..4a2f68b5672 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);