aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--slock.c22
1 files changed, 15 insertions, 7 deletions
diff --git a/slock.c b/slock.c
index 3e2ab8f..9ec2f71 100644
--- a/slock.c
+++ b/slock.c
@@ -65,19 +65,27 @@ die(const char *errstr, ...)
65 65
66#ifdef __linux__ 66#ifdef __linux__
67#include <fcntl.h> 67#include <fcntl.h>
68#include <linux/oom.h>
68 69
69static void 70static void
70dontkillme(void) 71dontkillme(void)
71{ 72{
72 int fd; 73 FILE *f;
74 const char oomfile[] = "/proc/self/oom_score_adj";
73 75
74 fd = open("/proc/self/oom_score_adj", O_WRONLY); 76 if (!(f = fopen(oomfile, "w"))) {
75 if (fd < 0 && errno == ENOENT) { 77 if (errno == ENOENT)
76 return; 78 return;
79 die("slock: fopen %s: %s\n", oomfile, strerror(errno));
77 } 80 }
78 if (fd < 0 || write(fd, "-1000\n", (sizeof("-1000\n") - 1)) != 81 fprintf(f, "%d", OOM_SCORE_ADJ_MIN);
79 (sizeof("-1000\n") - 1) || close(fd) != 0) { 82 if (fclose(f)) {
80 die("can't tame the oom-killer. is suid or sgid set?\n"); 83 if (errno == EACCES)
84 die("slock: unable to disable OOM killer. "
85 "suid or sgid set?\n");
86 else
87 die("slock: fclose %s: %s\n", oomfile,
88 strerror(errno));
81 } 89 }
82} 90}
83#endif 91#endif