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__
|
#ifdef __linux__
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <linux/oom.h>
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
dontkillme(void)
|
dontkillme(void)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
int length;
|
|
||||||
char value[64];
|
|
||||||
|
|
||||||
fd = open("/proc/self/oom_score_adj", O_WRONLY);
|
fd = open("/proc/self/oom_score_adj", O_WRONLY);
|
||||||
if (fd < 0 && errno == ENOENT)
|
if (fd < 0 && errno == ENOENT) {
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
/* convert OOM_SCORE_ADJ_MIN to string for writing */
|
if (fd < 0 || write(fd, "-1000\n", (sizeof("-1000\n") - 1)) !=
|
||||||
length = snprintf(value, sizeof(value), "%d\n", OOM_SCORE_ADJ_MIN);
|
(sizeof("-1000\n") - 1) || close(fd) != 0) {
|
||||||
|
die("can't tame the oom-killer. is suid or sgid set?\n");
|
||||||
/* 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");
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue