Slightly safer OOM killer disablement in linux
This commit is contained in:
parent
754195f8d7
commit
0edbd2e016
1 changed files with 12 additions and 1 deletions
13
slock.c
13
slock.c
|
@ -60,16 +60,27 @@ 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;
|
||||||
if (fd < 0 || write(fd, "-1000\n", 6) != 6 || close(fd) != 0)
|
|
||||||
|
/* 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\n");
|
die("cannot disable the out-of-memory killer for this process\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue