Simplify the oom-taming-function
There really is no need to source a defined variable from a linux header. The OOM-rank ranges from -1000 to 1000, so we can safely hardcode -1000, which is a sane thing to do given slock is suid and we don't want to play around too much here anyway. On another notice, let's not forget that this still is a shitty heuristic. The OOM-killer still can kill us (thus I also changed the wording in the error-message. We do not disable the OOM-killer, we're just hiding.
This commit is contained in:
parent
6a52a85a1a
commit
3abbffa493
1 changed files with 6 additions and 14 deletions
20
slock.c
20
slock.c
|
@ -60,28 +60,20 @@ die(const char *errstr, ...)
|
|||
|
||||
#ifdef __linux__
|
||||
#include <fcntl.h>
|
||||
#include <linux/oom.h>
|
||||
|
||||
static void
|
||||
dontkillme(void)
|
||||
{
|
||||
int fd;
|
||||
int length;
|
||||
char value[64];
|
||||
|
||||
fd = open("/proc/self/oom_score_adj", O_WRONLY);
|
||||
if (fd < 0 && errno == ENOENT)
|
||||
if (fd < 0 && errno == ENOENT) {
|
||||
return;
|
||||
|
||||
/* convert OOM_SCORE_ADJ_MIN to string for writing */
|
||||
length = snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN);
|
||||
|
||||
/* bail on truncation */
|
||||
if (length >= sizeof(value))
|
||||
die("buffer too small\n");
|
||||
|
||||
if (fd < 0 || write(fd, value, length) != length || close(fd) != 0)
|
||||
die("cannot disable the out-of-memory killer for this process (make sure to suid or sgid slock)\n");
|
||||
}
|
||||
if (fd < 0 || write(fd, "-1000\n", (sizeof("-1000\n") - 1)) !=
|
||||
(sizeof("-1000\n") - 1) || close(fd) != 0) {
|
||||
die("can't tame the oom-killer. is suid or sgid set?\n");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue