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