From f0023a8307d74fa725424821433582eea645a4c5 Mon Sep 17 00:00:00 2001 From: tpearson Date: Mon, 21 Feb 2011 18:45:09 +0000 Subject: [PATCH] Support kernel >= 2.6.36 Thanks to Novell and Ilya git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdelibs@1222098 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- kinit/start_kdeinit.c | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/kinit/start_kdeinit.c b/kinit/start_kdeinit.c index 722f3e97f..a86b366e5 100644 --- a/kinit/start_kdeinit.c +++ b/kinit/start_kdeinit.c @@ -44,11 +44,30 @@ static int set_protection( pid_t pid, int enable ) { char buf[ 1024 ]; int procfile; + struct stat st; + + /* Newer kernels (noticed in 2.6.36) */ + sprintf( buf, "/proc/%d/oom_score_adj", pid ); + if ( lstat (buf, &st) == 0) { + if( !enable ) { + /* Be paranoid and check that the pid we got from the pipe + belongs to this user. */ + if( st.st_uid != getuid()) + return 0; + } + procfile = open(buf, O_WRONLY); + if( enable ) + write( procfile, "-300", sizeof( "-300" )); + else + write( procfile, "0", sizeof( "0" )); + close( procfile ); + return 1; + } + sprintf( buf, "/proc/%d/stat", pid ); if( !enable ) { /* Be paranoid and check that the pid we got from the pipe belongs to this user. */ - struct stat st; if( lstat( buf, &st ) < 0 || st.st_uid != getuid()) return 0; }