set nice/oom_adjust only when asked for

This commit is contained in:
Lennart Poettering 2010-01-28 02:53:56 +01:00
parent d46de8a1a2
commit fb33a393e2
3 changed files with 42 additions and 23 deletions

View file

@ -263,7 +263,6 @@ int exec_spawn(const ExecCommand *command, const ExecContext *context, int *fds,
if (pid == 0) {
char **e, **f = NULL;
int i, r;
char t[16];
sigset_t ss;
/* child */
@ -286,18 +285,23 @@ int exec_spawn(const ExecCommand *command, const ExecContext *context, int *fds,
goto fail;
}
snprintf(t, sizeof(t), "%i", context->oom_adjust);
char_array_0(t);
if (context->oom_adjust_set) {
char t[16];
if (write_one_line_file("/proc/self/oom_adj", t) < 0) {
r = EXIT_OOM_ADJUST;
goto fail;
snprintf(t, sizeof(t), "%i", context->oom_adjust);
char_array_0(t);
if (write_one_line_file("/proc/self/oom_adj", t) < 0) {
r = EXIT_OOM_ADJUST;
goto fail;
}
}
if (setpriority(PRIO_PROCESS, 0, context->nice) < 0) {
r = EXIT_NICE;
goto fail;
}
if (context->nice_set)
if (setpriority(PRIO_PROCESS, 0, context->nice) < 0) {
r = EXIT_NICE;
goto fail;
}
if (close_fds(fds, n_fds) < 0 ||
shift_fds(fds, n_fds) < 0 ||
@ -428,13 +432,19 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) {
fprintf(f,
"%sUmask: %04o\n"
"%sDirectory: %s\n"
"%sNice: %i\n"
"%sOOMAdjust: %i\n",
"%sDirectory: %s\n",
prefix, c->umask,
prefix, c->directory ? c->directory : "/",
prefix, c->nice,
prefix, c->oom_adjust);
prefix, c->directory ? c->directory : "/");
if (c->nice_set)
fprintf(f,
"%sNice: %i\n",
prefix, c->nice);
if (c->oom_adjust_set)
fprintf(f,
"%sOOMAdjust: %i\n",
prefix, c->oom_adjust);
}
void exec_status_fill(ExecStatus *s, pid_t pid, int code, int status) {

View file

@ -44,9 +44,12 @@ struct ExecContext {
char **environment;
mode_t umask;
struct rlimit *rlimit[RLIMIT_NLIMITS]; /* FIXME: load-fragment parser missing */
char *directory;
int oom_adjust;
int nice;
char *directory;
bool oom_adjust_set:1;
bool nice_set:1;
ExecOutput output;
int syslog_priority;

View file

@ -208,7 +208,8 @@ static int config_parse_nice(
void *data,
void *userdata) {
int *i = data, priority, r;
ExecContext *c = data;
int priority, r;
assert(filename);
assert(lvalue);
@ -225,7 +226,9 @@ static int config_parse_nice(
return -ERANGE;
}
*i = priority;
c->nice = priority;
c->nice_set = false;
return 0;
}
@ -238,7 +241,8 @@ static int config_parse_oom_adjust(
void *data,
void *userdata) {
int *i = data, oa, r;
ExecContext *c = data;
int oa, r;
assert(filename);
assert(lvalue);
@ -255,7 +259,9 @@ static int config_parse_oom_adjust(
return -ERANGE;
}
*i = oa;
c->oom_adjust = oa;
c->oom_adjust_set = true;
return 0;
}
@ -709,8 +715,8 @@ static int load_from_path(Unit *u, const char *path) {
{ "User", config_parse_string, &(context).user, section }, \
{ "Group", config_parse_string, &(context).group, section }, \
{ "SupplementaryGroups", config_parse_strv, &(context).supplementary_groups, section }, \
{ "Nice", config_parse_nice, &(context).nice, section }, \
{ "OOMAdjust", config_parse_oom_adjust, &(context).oom_adjust, section }, \
{ "Nice", config_parse_nice, &(context), section }, \
{ "OOMAdjust", config_parse_oom_adjust, &(context), section }, \
{ "UMask", config_parse_umask, &(context).umask, section }, \
{ "Environment", config_parse_strv, &(context).environment, section }, \
{ "Output", config_parse_output, &(context).output, section }, \