chiark / gitweb /
udev: reset /proc/self/oom_score_adj in worker processes
authorKay Sievers <kay@vrfy.org>
Mon, 4 Jun 2012 16:10:50 +0000 (18:10 +0200)
committerKay Sievers <kay@vrfy.org>
Mon, 4 Jun 2012 16:10:50 +0000 (18:10 +0200)
Only the main daemon process should be excluded from OOM handling,
not the worker processes or their child processes.

src/udev/udevd.c

index 8ad1eccac14a573eef077bdc844d64a3053248db..2ac9fde04914508e9617eb41f8a79d9fc2fd2e98 100644 (file)
@@ -262,6 +262,9 @@ static void worker_new(struct event *event)
                 /* request TERM signal if parent exits */
                 prctl(PR_SET_PDEATHSIG, SIGTERM);
 
+                /* reset OOM score, we only protect the main daemon */
+                write_one_line_file("/proc/self/oom_score_adj", "0");
+
                 for (;;) {
                         struct udev_event *udev_event;
                         struct worker_message msg;
@@ -1230,7 +1233,6 @@ int main(int argc, char *argv[])
 
         if (daemonize) {
                 pid_t pid;
-                int fd;
 
                 pid = fork();
                 switch (pid) {
@@ -1247,11 +1249,7 @@ int main(int argc, char *argv[])
 
                 setsid();
 
-                fd = open("/proc/self/oom_score_adj", O_RDWR|O_CLOEXEC);
-                if (fd >= 0) {
-                        write(fd, "-1000", 5);
-                        close(fd);
-                }
+                write_one_line_file("/proc/self/oom_score_adj", "-1000");
         } else {
                 sd_notify(1, "READY=1");
         }