diff options
-rw-r--r-- | .SRCINFO | 4 | ||||
-rw-r--r-- | PKGBUILD | 4 | ||||
-rw-r--r-- | xscreensaver-oom-protect.c | 13 |
3 files changed, 15 insertions, 6 deletions
@@ -1,6 +1,6 @@ pkgbase = xscreensaver-oom-protect pkgdesc = Protect xscreensaver from the out-of-memory killer - pkgver = 1.0.1 + pkgver = 1.0.2 pkgrel = 1 arch = x86_64 license = custom:WTFPL @@ -8,7 +8,7 @@ pkgbase = xscreensaver-oom-protect source = xscreensaver-oom-protect.c source = LICENSE source = xscreensaver.service - md5sums = a4cc96966ac71a75bc841c0279957a2f + md5sums = 39a62edba8e363a511f201ebbfbb67b2 md5sums = 8365d07beeb5f39d87e846dca3ae7b64 md5sums = bb945c067ae57367ddc6f041fd33dfa4 @@ -1,7 +1,7 @@ # Maintainer: Alexander Kobel <a-kobel@a-kobel.de> pkgname=xscreensaver-oom-protect -pkgver=1.0.1 +pkgver=1.0.2 pkgrel=1 pkgdesc="Protect xscreensaver from the out-of-memory killer" arch=('x86_64') @@ -10,7 +10,7 @@ depends=('xscreensaver') source=(${pkgname}.c LICENSE xscreensaver.service) -md5sums=('a4cc96966ac71a75bc841c0279957a2f' +md5sums=('39a62edba8e363a511f201ebbfbb67b2' '8365d07beeb5f39d87e846dca3ae7b64' 'bb945c067ae57367ddc6f041fd33dfa4') diff --git a/xscreensaver-oom-protect.c b/xscreensaver-oom-protect.c index 476883502d38..6a4e4b28f715 100644 --- a/xscreensaver-oom-protect.c +++ b/xscreensaver-oom-protect.c @@ -24,6 +24,7 @@ #include <errno.h> #include <limits.h> +#include <sched.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -33,10 +34,13 @@ int usage (char **argv) { fprintf (stderr, "Protect process <pid> from the OOM killer by setting its " - "oom_score_adj to %d and its nice value to -20.\n" + "oom_score_adj to %d, its\n" + "nice value to -20, and its priority to realtime.\n" "(TL;DR: try to avoid that an attacker types Alt+SysRq+F " "repeatedly and ends up\n" - "with your logged-in session without the xscreensaver lock.)\n" + "with your logged-in session without the xscreensaver lock, " + "and give screen locking\n" + "utmost urgency.)\n" "Will fail with error code %d if the process does not run " "/usr/bin/xscreensaver.\n" "For more information and background, see\n" @@ -86,6 +90,7 @@ int main (int argc, char **argv) { char xscreensaver_exe[PATH_MAX]; int n; FILE *f; + struct sched_param sparam; if (argc != 2) return usage (argv); @@ -114,5 +119,9 @@ int main (int argc, char **argv) { if (setpriority (PRIO_PROCESS, pid, INT_MIN) != 0) return errno; + sparam.sched_priority = 99; + if (sched_setscheduler (pid, SCHED_FIFO, &sparam) != 0) + return errno; + return 0; } |