diff options
author | Lennart Poettering <lennart@poettering.net> | 2016-07-22 17:40:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-22 17:40:12 +0200 |
commit | 5052c4eadd31715ed21e091dec0dce5f4f3d7baa (patch) | |
tree | 5f03c55daf026b4ceac99ae71de3d9645224d17b /src/login/logind-user.c | |
parent | fec603eb6cbba4ea03ef01e3ad48fa85a4812a9c (diff) | |
parent | b3785cd5e6a0ac4d465713db221e1a150aabd5f6 (diff) |
Merge pull request #3753 from poettering/tasks-max-scale
Add support for relative TasksMax= specifications, and bump default for services
Diffstat (limited to 'src/login/logind-user.c')
-rw-r--r-- | src/login/logind-user.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/login/logind-user.c b/src/login/logind-user.c index de44d369cf..f7d83909a0 100644 --- a/src/login/logind-user.c +++ b/src/login/logind-user.c @@ -870,3 +870,48 @@ int config_parse_tmpfs_size( return 0; } + +int config_parse_user_tasks_max( + const char* unit, + const char *filename, + unsigned line, + const char *section, + unsigned section_line, + const char *lvalue, + int ltype, + const char *rvalue, + void *data, + void *userdata) { + + uint64_t *m = data; + uint64_t k; + int r; + + assert(filename); + assert(lvalue); + assert(rvalue); + assert(data); + + /* First, try to parse as percentage */ + r = parse_percent(rvalue); + if (r > 0 && r < 100) + k = system_tasks_max_scale(r, 100U); + else { + + /* If the passed argument was not a percentage, or out of range, parse as byte size */ + + r = safe_atou64(rvalue, &k); + if (r < 0) { + log_syntax(unit, LOG_ERR, filename, line, r, "Failed to parse tasks maximum, ignoring: %s", rvalue); + return 0; + } + } + + if (k <= 0 || k >= UINT64_MAX) { + log_syntax(unit, LOG_ERR, filename, line, 0, "Tasks maximum out of range, ignoring: %s", rvalue); + return 0; + } + + *m = k; + return 0; +} |