summaryrefslogtreecommitdiffstats
path: root/opensuse/core/tdelibs/oom_score_adj.patch
blob: f7a929f3f731d22f7f6660cf67331d68c215f75c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Index: kdelibs-3.5.10/kinit/start_kdeinit.c
===================================================================
--- kdelibs-3.5.10.orig/kinit/start_kdeinit.c
+++ kdelibs-3.5.10/kinit/start_kdeinit.c
@@ -44,11 +44,30 @@ static int set_protection( pid_t pid, in
 {
    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;
    }