diff options
-rw-r--r-- | slock.c | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -60,16 +60,27 @@ die(const char *errstr, ...) | |||
60 | 60 | ||
61 | #ifdef __linux__ | 61 | #ifdef __linux__ |
62 | #include <fcntl.h> | 62 | #include <fcntl.h> |
63 | #include <linux/oom.h> | ||
63 | 64 | ||
64 | static void | 65 | static void |
65 | dontkillme(void) | 66 | dontkillme(void) |
66 | { | 67 | { |
67 | int fd; | 68 | int fd; |
69 | int length; | ||
70 | char value[64]; | ||
68 | 71 | ||
69 | fd = open("/proc/self/oom_score_adj", O_WRONLY); | 72 | fd = open("/proc/self/oom_score_adj", O_WRONLY); |
70 | if (fd < 0 && errno == ENOENT) | 73 | if (fd < 0 && errno == ENOENT) |
71 | return; | 74 | return; |
72 | if (fd < 0 || write(fd, "-1000\n", 6) != 6 || close(fd) != 0) | 75 | |
76 | /* convert OOM_SCORE_ADJ_MIN to string for writing */ | ||
77 | length = snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN); | ||
78 | |||
79 | /* bail on truncation */ | ||
80 | if (length >= sizeof(value)) | ||
81 | die("buffer too small\n"); | ||
82 | |||
83 | if (fd < 0 || write(fd, value, length) != length || close(fd) != 0) | ||
73 | die("cannot disable the out-of-memory killer for this process\n"); | 84 | die("cannot disable the out-of-memory killer for this process\n"); |
74 | } | 85 | } |
75 | #endif | 86 | #endif |