/*###### Miscellaneous global stuff ####################################*/
-static long Hertz;
-static long Page_size;
-
/* The original and new terminal definitions
(only set when not in 'Batch' mode) */
static struct termios Tty_original, // our inherited terminal definition
static int Rc_questions;
/* The run-time acquired page stuff */
+static long Page_size;
static unsigned Pg2K_shft = 0;
- /* SMP, Irix/Solaris mode, Linux 2.5.xx support */
+ /* SMP, Irix/Solaris mode, Linux 2.5.xx support (and beyond) */
+static long Hertz;
static int Cpu_cnt;
static int Cpu_faux_cnt;
static float Cpu_pmax;
/* Support for the new library API -- acquired (if necessary)
at program startup and referenced throughout our lifetime */
-static struct procps_meminfo *Mem_context;
-static struct meminfo_result Mem_chain[] = {
- { PROCPS_MEM_FREE, 0, &Mem_chain[1] },
- { PROCPS_MEM_USED, 0, &Mem_chain[2] },
- { PROCPS_MEM_TOTAL, 0, &Mem_chain[3] },
- { PROCPS_MEM_CACHED, 0, &Mem_chain[4] },
- { PROCPS_MEM_BUFFERS, 0, &Mem_chain[5] },
- { PROCPS_MEM_AVAILABLE, 0, &Mem_chain[6] },
- { PROCPS_SWAP_TOTAL, 0, &Mem_chain[7] },
- { PROCPS_SWAP_FREE, 0, &Mem_chain[8] },
- { PROCPS_SWAP_USED, 0, NULL }
-};
-enum mem_enums {
+static struct procps_meminfo *Mem_ctx;
+static struct meminfo_chain *Mem_chain;
+static enum meminfo_item Mem_items[] = {
+ PROCPS_MEM_FREE, PROCPS_MEM_USED, PROCPS_MEM_TOTAL,
+ PROCPS_MEM_CACHED, PROCPS_MEM_BUFFERS, PROCPS_MEM_AVAILABLE,
+ PROCPS_SWAP_TOTAL, PROCPS_SWAP_FREE, PROCPS_SWAP_USED };
+enum Rel_items {
mem_FREE, mem_USED, mem_TOTAL, mem_CACHE, mem_BUFFS,
mem_AVAIL, swp_TOTAL, swp_FREE, swp_USED
};
-#define MEM_VAL(e) Mem_chain[e].result
+#define MEM_VAL(e) Mem_chain->head[e].result
-static struct procps_stat *Cpu_context;
+static struct procps_stat *Cpu_ctx;
static struct procps_jiffs_hist *Cpu_jiffs;
\f
/*###### Sort callbacks ################################################*/
#endif // end: ATEOJ_RPTHSH
#endif // end: OFF_HST_HASH
- procps_stat_unref(&Cpu_context);
- procps_meminfo_unref(&Mem_context);
+ procps_stat_unref(&Cpu_ctx);
+ procps_meminfo_unref(&Mem_ctx);
#ifndef NUMA_DISABLE
if (Libnuma_handle) dlclose(Libnuma_handle);
#endif
}
// 1st, snapshot the proc/stat cpu jiffs
- if (procps_stat_read_jiffs(Cpu_context) < 0)
+ if (procps_stat_read_jiffs(Cpu_ctx) < 0)
error_exit(N_txt(LIB_errorcpu_txt));
// 2nd, retrieve just the cpu summary jiffs
- if (procps_stat_get_jiffs_hist(Cpu_context, &Cpu_jiffs[sumSLOT], -1) < 0)
+ if (procps_stat_get_jiffs_hist(Cpu_ctx, &Cpu_jiffs[sumSLOT], -1) < 0)
error_exit(N_txt(LIB_errorcpu_txt));
// 3rd, retrieve all of the actual cpu jiffs
- Cpu_faux_cnt = procps_stat_get_jiffs_hist_all(Cpu_context, Cpu_jiffs, sumSLOT);
+ Cpu_faux_cnt = procps_stat_get_jiffs_hist_all(Cpu_ctx, Cpu_jiffs, sumSLOT);
if (Cpu_faux_cnt < 0)
error_exit(N_txt(LIB_errorcpu_txt));
/*** hotplug_acclimated ***/
if (3 <= cur_secs - mem_secs) {
- if ((procps_meminfo_read(Mem_context) < 0)
- || (procps_meminfo_get_chain(Mem_context, Mem_chain) < 0))
- error_exit(N_txt(LIB_errormem_txt));
- procps_meminfo_get_chain(Mem_context, Mem_chain);
+ // 'chain_fill' also implies 'read', saving us one more call
+ if ((procps_meminfo_chain_fill(Mem_ctx, Mem_chain) < 0))
+ error_exit(N_txt(LIB_errormem_txt));
mem_secs = cur_secs;
}
#ifndef PRETEND8CPUS
while (i > 1024) { i >>= 1; Pg2K_shft++; }
// prepare for new library API ...
- if (procps_meminfo_new(&Mem_context) < 0)
+ if (procps_meminfo_new(&Mem_ctx) < 0)
+ error_exit(N_txt(LIB_errormem_txt));
+ if (!(Mem_chain = procps_meminfo_chain_alloc(Mem_ctx, MAXTBL(Mem_items), Mem_items)))
error_exit(N_txt(LIB_errormem_txt));
- if (procps_stat_new(&Cpu_context) < 0)
+ if (procps_stat_new(&Cpu_ctx) < 0)
error_exit(N_txt(LIB_errorcpu_txt));
#ifndef OFF_HST_HASH