X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fexecute.c;h=755b4700fc0c02fbbe1bcb1b03459ff45998e6db;hp=2443d9c74d08e65c543ebed36350bed31593d5d6;hb=f73d93a4d9403d44bf3661bf383ac1385e5b5eb6;hpb=da726a4d4dc324b35c703fd2dc5f60b460ce8091 diff --git a/src/execute.c b/src/execute.c index 2443d9c74..755b4700f 100644 --- a/src/execute.c +++ b/src/execute.c @@ -36,6 +36,7 @@ #include #include #include +#include #ifdef HAVE_PAM #include @@ -52,6 +53,7 @@ #include "namespace.h" #include "tcpwrap.h" #include "exit-status.h" +#include "missing.h" /* This assumes there is a 'tty' group */ #define TTY_MODE 0620 @@ -1066,15 +1068,27 @@ int exec_spawn(ExecCommand *command, goto fail; } - if (context->oom_adjust_set) { + if (context->oom_score_adjust_set) { char t[16]; - snprintf(t, sizeof(t), "%i", context->oom_adjust); + snprintf(t, sizeof(t), "%i", context->oom_score_adjust); char_array_0(t); - if (write_one_line_file("/proc/self/oom_adj", t) < 0) { - r = EXIT_OOM_ADJUST; - goto fail; + if (write_one_line_file("/proc/self/oom_score_adj", t) < 0) { + /* Compatibility with Linux <= 2.6.35 */ + + int adj; + + adj = (context->oom_score_adjust * -OOM_DISABLE) / OOM_SCORE_ADJ_MAX; + adj = CLAMP(adj, OOM_DISABLE, OOM_ADJUST_MAX); + + snprintf(t, sizeof(t), "%i", adj); + char_array_0(t); + + if (write_one_line_file("/proc/self/oom_adj", t) < 0) { + r = EXIT_OOM_ADJUST; + goto fail; + } } } @@ -1461,10 +1475,10 @@ void exec_context_dump(ExecContext *c, FILE* f, const char *prefix) { "%sNice: %i\n", prefix, c->nice); - if (c->oom_adjust_set) + if (c->oom_score_adjust_set) fprintf(f, - "%sOOMAdjust: %i\n", - prefix, c->oom_adjust); + "%sOOMScoreAdjust: %i\n", + prefix, c->oom_score_adjust); for (i = 0; i < RLIM_NLIMITS; i++) if (c->rlimit[i])