The old behaviour of slock was to write the hardcoded string "-1000\n"
to `/proc/self/oom_score_adj`. My patch, while a bit less tidy, errs
on the side of caution by deriving this string from OOM_SCORE_ADJ_MIN,
which is defined in `linux/oom.h` as being the score to use to disable
the OOM killer.

I'd be interested in any feedback on this patch, as I feel bad for
submitting a patch which makes code less tidy :-P

-- 
Four word witty remark
diff --git a/slock.c b/slock.c
index d6053af..8510df0 100644
--- a/slock.c
+++ b/slock.c
@@ -60,16 +60,25 @@ die(const char *errstr, ...)
 #ifdef __linux__
 #include <fcntl.h>
+#include <linux/oom.h>
 static void
 dontkillme(void)
 {
-       int fd;
+       int fd, length;
+       char value[64];
        fd = open("/proc/self/oom_score_adj", O_WRONLY);
        if (fd < 0 && errno == ENOENT)
                return;
-       if (fd < 0 || write(fd, "-1000\n", 6) != 6 || close(fd) != 0)
+
+       /* convert OOM_SCORE_ADJ_MIN to string for writing */
+       if (snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN) >= 
sizeof(value))
+               die("cannot convert OOM_SCORE_ADJ_MIN to string of less than %d 
bytes\n", sizeof(value));
+
+       length = strlen(value);
+
+       if (fd < 0 || write(fd, value, length) != length || close(fd) != 0)
                die("cannot disable the out-of-memory killer for this 
process\n");
 }
 #endif

Reply via email to