[procps] [PATCH 1/2] Add missed oom support to libproc

  • From: "Dr. Werner Fink" <werner@xxxxxxx>
  • To: procps@xxxxxxxxxxxxx
  • Date: Thu, 14 Apr 2011 15:14:10 +0200

Just one small change to be able to use ZAP_SUSEONLY cpp
define found in newtop.

Signed-off-by: Werner Fink <werner@xxxxxxx>
---
 proc/readproc.c |   22 +++++++++++++++++++++-
 proc/readproc.h |    5 +++++
 2 files changed, 26 insertions(+), 1 deletions(-)

diff --git a/proc/readproc.c b/proc/readproc.c
index 890e77a..a0a5d28 100644
--- a/proc/readproc.c
+++ b/proc/readproc.c
@@ -365,6 +365,19 @@ LEAVE(0x220);
 }
 
 ///////////////////////////////////////////////////////////////////////
+#ifdef ZAP_SUSEONLY
+static void oomscore2proc(const char* S, proc_t *restrict P)
+{
+    sscanf(S, "%d", &P->oom_score);
+}
+
+static void oomadj2proc(const char* S, proc_t *restrict P)
+{
+    sscanf(S, "%d", &P->oom_adj);
+}
+#endif
+///////////////////////////////////////////////////////////////////////
+
 
 // Reads /proc/*/stat files, being careful not to trip over processes with
 // names like ":-) 1 2 3 4 5 6".
@@ -637,7 +650,14 @@ static proc_t* simple_readproc(PROCTAB *restrict const PT, 
proc_t *restrict cons
        p->environ = file2strvec(path, "environ");
     else
         p->environ = NULL;
-
+#ifdef ZAP_SUSEONLY
+    if (unlikely(flags & PROC_FILLOOM)) {
+       if (likely( file2str(path, "oom_score", sbuf, sizeof sbuf) != -1 ))
+           oomscore2proc(sbuf, p);
+       if (likely( file2str(path, "oom_adj", sbuf, sizeof sbuf) != -1 ))
+           oomadj2proc(sbuf, p);
+    } /* struct has been zeroed out before, so no worries about clearing 
garbage here */
+#endif
     if(linux_version_code>=LINUX_VERSION(2,6,24) && (flags & PROC_FILLCGROUP))
        p->cgroup = file2strvec(path, "cgroup");        /* read /proc/#/cgroup 
*/
     else
diff --git a/proc/readproc.h b/proc/readproc.h
index 0b2c46a..3404c19 100644
--- a/proc/readproc.h
+++ b/proc/readproc.h
@@ -140,6 +140,10 @@ typedef struct proc_t {
        tpgid,          // stat            terminal process group id
        exit_signal,    // stat            might not be SIGCHLD
        processor;      // stat            current (or most recent?) CPU
+#ifdef ZAP_SUSEONLY
+       int oom_score,  // oom_score       (badness for OOM killer)
+           oom_adj;    // oom_adj         (adjustment to OOM score)
+#endif
        char **cgroup;  // cgroup          current cgroup, looks like a classic 
filepath
 } proc_t;
 
@@ -239,6 +243,7 @@ extern proc_t * get_proc_stats(pid_t pid, proc_t *p);
 #define PROC_FILLWCHAN       0x0080 // look up WCHAN name
 #define PROC_FILLARG         0x0100 // alloc and fill in `cmdline'
 #define PROC_FILLCGROUP      0x0200 // alloc and fill in `cgroup`
+#define PROC_FILLOOM         0x0400 // alloc and fill in oom_score, oom_adj
 
 #define PROC_LOOSE_TASKS     0x2000 // threat threads as if they were processes
 
-- 
1.6.0.2


Other related posts:

  • » [procps] [PATCH 1/2] Add missed oom support to libproc - Dr. Werner Fink