[SIGAR-102] check kernel version rather than /proc/diskstats to detect nptl

This commit is contained in:
Doug MacEachern 2008-05-16 02:37:21 +00:00
parent ab75320e8a
commit ac0c681fb7
2 changed files with 17 additions and 4 deletions

View File

@ -23,6 +23,7 @@
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/times.h>
#include <sys/utsname.h>
#include "sigar.h"
#include "sigar_private.h"
@ -45,9 +46,6 @@
#define PROC_PARTITIONS PROC_FS_ROOT "partitions"
#define PROC_DISKSTATS PROC_FS_ROOT "diskstats"
/* Native POSIX Thread Library 2.6+ kernel */
#define SIGAR_HAS_NPTL (sigar->iostat == IOSTAT_DISKSTATS)
/*
* /proc/self/stat fields:
* 1 - pid
@ -157,7 +155,9 @@ static int sigar_boot_time_get(sigar_t *sigar)
int sigar_os_open(sigar_t **sigar)
{
int i, status;
int kernel_rev, has_nptl;
struct stat sb;
struct utsname name;
*sigar = malloc(sizeof(**sigar));
@ -199,6 +199,17 @@ int sigar_os_open(sigar_t **sigar)
/* hook for using mirrored /proc/net/tcp file */
(*sigar)->proc_net = getenv("SIGAR_PROC_NET");
uname(&name);
/* 2.X.y.z -> just need X (unless there is ever a kernel version 3!) */
kernel_rev = atoi(&name.release[2]);
if (kernel_rev >= 6) {
has_nptl = 1;
}
else {
has_nptl = getenv("SIGAR_HAS_NPTL") ? 1 : 0;
}
(*sigar)->has_nptl = has_nptl;
return SIGAR_OK;
}
@ -585,7 +596,7 @@ int sigar_os_proc_list_get(sigar_t *sigar,
{
DIR *dirp = opendir(PROCP_FS_ROOT);
struct dirent *ent, dbuf;
register const int threadbadhack = !SIGAR_HAS_NPTL;
register const int threadbadhack = !sigar->has_nptl;
if (!dirp) {
return errno;

View File

@ -67,6 +67,8 @@ struct sigar_t {
int lcpu;
linux_iostat_e iostat;
char *proc_net;
/* Native POSIX Thread Library 2.6+ kernel */
int has_nptl;
};
#define HAVE_STRERROR_R