]> granicus.if.org Git - procps-ng/commitdiff
library: add priming read at 'new' time <most modules>
authorJim Warner <james.warner@comcast.net>
Sat, 17 Sep 2016 09:44:44 +0000 (04:44 -0500)
committerCraig Small <csmall@enc.com.au>
Wed, 21 Sep 2016 11:06:12 +0000 (21:06 +1000)
A priming read at 'new' time in that <slabinfo> module
was important so that permission problems are detected
early. Plus, it also had the potential of making delta
values valid when 'get' or 'select' were first called.

It is for that latter reason that such a read was also
incorporated in the <diskstats> module 'new' function.
No other module, however, employed such priming reads.

This patch just brings those potential benefits to all
of our other newlib modules with the exception of that
<pids> guy. That module is, of necessity, sufficiently
different from those others to justify such exclusion.

Not only are there precious few DELTA enums in <pids>,
but the costs of a priming read would be much greater.

[ otherwise, these newly added priming reads have no ]
[ measurable negative impact on performance/timings. ]

Signed-off-by: Jim Warner <james.warner@comcast.net>
proc/meminfo.c
proc/stat.c
proc/vmstat.c

index 0882a4935ccabefcb620a416595aa9ad3383e85e..53d4e46f23239f455f3bd237827897c8a7a2db8d 100644 (file)
@@ -749,6 +749,14 @@ PROCPS_EXPORT int procps_meminfo_new (
         return rc;
     }
 
+    /* do a priming read here for the following potential benefits: |
+         1) ensure there will be no problems with subsequent access |
+         2) make delta results potentially useful, even if 1st time | */
+    if ((rc = meminfo_read_failed(p))) {
+        procps_meminfo_unref(&p);
+        return rc;
+    }
+
     *info = p;
     return 0;
 } // end: procps_meminfo_new
index d81f817e507e3cc5cab5b9863c2720aed25b2b13..141873c782007cf0ad33bc1fe9fa1072a7b6e338 100644 (file)
@@ -828,6 +828,7 @@ PROCPS_EXPORT int procps_stat_new (
         struct stat_info **info)
 {
     struct stat_info *p;
+    int rc;
 
     if (info == NULL || *info != NULL)
         return -EINVAL;
@@ -869,6 +870,14 @@ PROCPS_EXPORT int procps_stat_new (
  #endif
 #endif
 
+    /* do a priming read here for the following potential benefits: |
+         1) ensure there will be no problems with subsequent access |
+         2) make delta results potentially useful, even if 1st time | */
+    if ((rc = stat_read_failed(p))) {
+        procps_stat_unref(&p);
+        return rc;
+    }
+
     *info = p;
     return 0;
 } // end :procps_stat_new
index 62d480eb606df75fb96900020cd9d8db1439d0d2..71b374b58f1fed728bbb975fa485bf4ff27018dd 100644 (file)
@@ -1133,6 +1133,14 @@ PROCPS_EXPORT int procps_vmstat_new (
         return rc;
     }
 
+    /* do a priming read here for the following potential benefits: |
+         1) ensure there will be no problems with subsequent access |
+         2) make delta results potentially useful, even if 1st time | */
+    if ((rc = vmstat_read_failed(p))) {
+        procps_vmstat_unref(&p);
+        return rc;
+    }
+
     *info = p;
     return 0;
 } // end: procps_vmstat_new